Я хочу, чтобы определить глобальную переменную как лист на открытие файла, так что я использовал следующий код:Глобальные переменные сбрасываются автоматически
В Module1:
Public mySheet As Worksheet
В ThisWorkbook:
Sub Workbook_Open()
Set mySheet = Sheet1
End Sub
Я хочу использовать mySheet
, чтобы обратиться к этому конкретному рабочему листу в течение нескольких процедур, некоторые из которых ссылаются на этот лист, открыв новый файл.
Работает изначально - когда я открываю файл, задается переменная, а макрос содержит mySheet.Unprotect
, mySheet.Protect
и mySheet.Range("A1")
. Однако, когда я пытаюсь запустить его снова, я получаю сообщение об ошибке Object variable or With block variable not set
, и отладка возвращает меня к строке mySheet.Unprotect
, которая является ссылкой на первый раз.
Как я могу определить этот рабочий лист в глобальной переменной, чтобы определить это определение?
Для справки, конкретный макрос, я имею в виду ниже, хотя у меня была аналогичная проблема с различными битами кода:
Sub mySub()
mySheet.Unprotect
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
If .Show <> 0 Then
mySheet.Range("A1") = .SelectedItems(1)
End If
End With
mySheet.Protect
End Sub
определяют 'mysheet' как' 'constant' с sheet1', будет эта работа? – psychicebola
@psychicebola VBA не поддерживает объектные константы, они должны быть инициализированы внутри процедуры. –
Попробуйте [отладить] (http://www.cpearson.com/excel/DebuggingVBA.aspx) свой код, используя окно locals, чтобы узнать, что происходит с переменной. Тот факт, что он работает в первый раз, говорит мне, что что-то не так с процедурой - не то, как вы назначаете переменную. –