VBE должен выделять слово Worksheet
в ThisWorkbook.Worksheet("Sheet3").Range("A:X")
.
«Метод или элемент данных не найден» означает, что Worksheet
не является членом ThisWorkbook
.
Вы можете исправить это, нажав CTRL + SPACE , чтобы автоматически заполнить имя члена до Worksheets
.
В качестве альтернативы, вы можете повторно ввести оператор разыменования .
после ThisWorkbook
и нажать TAB , когда отобразится раскрывающийся список со списком имен, выделив элемент Worksheets
, что также приведет к автозаполнению имя члена Worksheets
.
Правило большого пальца: если вы введете оператор разыменования .
, а затем введете что-то, чего нет в списке имен, вы можете ожидать эту ошибку компиляции.
Когда вы делаете эту опечатку для переменной Variant
или Object
, код скомпилируется с радостью, но ошибка 438 будет выдана во время выполнения - как это:
ThisWorkbook.Worksheets("Sheet3").Ragne("A:X") ' <~ typo compiles. Option Explicit can't save you.
Причина в том, что Worksheets
возвращает ссылку Object
, поэтому любые вызовы членов, связанные с ней, разрешаются во время выполнения. Более безопасный способ написания кода - объявить локальную переменную Worksheet
для хранения этого объекта, а затем вместо этого работать с этим объектом:
Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Worksheets("Sheet3")
sourceSheet.Rnage("A:X") ' <~ typo throws at compile-time now!
Если объект рабочего листа существует в ThisWorkbook
во время компиляции, то, вероятно, лучше вместо этого работать с кодовым именем . Найдите Sheet3
в Project Explorer ( CTRL + R), затем найдите его свойство (Name)
- измените его, например, на. SourceSheet
. И тогда вы можете сделать это:
SourceSheet.Range("A:X") ' <~ a typo wouldn't compile here.
... без необходимости явно объявлять SourceSheet
.