Ошибка несоответствия типов при инициализации переменных

У меня есть эта действительно странная ошибка в Excel VBA, которая продолжает появляться. Я использовал коды ниже

Public psword, oldpsword As Integer


Public Sub Auto_Open()

psword = Sheets("Main Menu").Cells(55, 1)
oldpsword = psword
For Each ws In Worksheets
    ws.Protect Password:=psword
Next ws

End Sub

Всякий раз, когда код переходит к строке «oldpsword = psword», появляется сообщение об ошибке, показывающее ошибку несоответствия типа «13:» во время выполнения. Как я могу это исправить?


person user3024808    schedule 02.05.2014    source источник
comment
В строке Public psword, oldpsword As Integer только oldpsword соответствует Integer, а psword соответствует Variant. Восстановить Public psword As integer, oldpsword As Integer   -  person Dmitry Pavliv    schedule 02.05.2014
comment
Я согласен с simoco, что вам нужно исправить свое заявление Dim. Однако я подозреваю, что проблема в том, что Cells(55,1) не содержит целого числа. Вариант может содержать что угодно, поэтому psWord = ... подходит, но oldpsword = psword не работает, потому что значение в psword не может быть преобразовано в целое число.   -  person Tony Dallimore    schedule 04.05.2014


Ответы (2)


Попробуйте заменить:

Public psword, oldpsword As Integer

с

Dim psword as Long, oldpsword as Long
person Gary's Student    schedule 02.05.2014

Просто общий комментарий здесь, поскольку simoco и Gary's Student запутали вас ... Если ваши пароли могут быть буквенно-цифровыми (небольшая предусмотрительность здесь может сэкономить вам часы отладки в будущем, особенно если ваш клиент неправильно вводит пароли, ха-ха), то вы можете использовать комбинацию variant и CStr (http://www.techonthenet.com/excel/formulas/cstr.php):

Public psword As Variant, oldpsword As Variant

Public Sub Auto_Open()

psword = ThisWorkbook.Sheets("Main Menu").Cells(55, 1)
oldpsword = psword
For Each ws In Worksheets
    ws.Protect Password:=CStr(psword)
Next ws

End Sub
person Dan Wagner    schedule 02.05.2014