Некорректное использование свойства Excel VBA - PullRequest
0 голосов
/ 25 октября 2018
Sub test()
    Worksheets("Sheet1").Range("A1").Value = 20
End Sub

Этот простой код выдает ошибку при компиляции.activesheet.отлично работает.

Я хочу знать, что привело к ошибке и как ее исправить ...

похоже, что она не идентифицирует листы, рабочую книгу и т. д.

1 Ответ

0 голосов
/ 25 октября 2018

Ответ зависит от того, какую ошибку вы получите.Может быть 2 вопроса:

1.Рабочая книга не указана

У вас более одной рабочей книги, и Excel ищет неправильную рабочую книгу для вашего листа с именем "Лист1", затем вам нужно указать рабочую книгу.

Workbooks("my-workbook").Worksheets("Sheet1").Range("A1").Value = 20

или, еслиИменно в книге, где выполняется код, лучше использовать

ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 20

Обратите внимание, что вам следует избегать ActiveWorkbook, который не очень надежен.

2.Неверное имя листа

Нет листа с именем Sheet1.Проверьте ваши имена листов.Обратите внимание, что существуют различные способы задания рабочего листа.

  • Укажите по номеру

    Worksheets(1).Range("A1")
    

    При этом используется положение рабочего листа впанель вкладок под рабочими листами.Обратите внимание, что это не очень надежно, поскольку положение можно легко изменить, перемещая вкладки.

  • Укажите по имени вкладки

    Worksheets("Sheet1").Range("A1")
    

    Этоэто, наверное, самый распространенный метод.Рабочий лист указан по имени вкладки.Это более надежно, чем по номеру.

  • Укажите по имени VBA

    Sheet1.Range("A1")
    

    Здесь используется имя листа VBA.Это имя можно изменить только в редакторе VB, оно невидимо для пользователя и никак не связано с именем вкладки.Использование этого гарантирует, что код VBA по-прежнему работает на нужном листе, даже если пользователь изменяет имя вкладки листа.

Так что, если имя вкладки Sheet1, его имя VBA можетбыть Sheet5, и он может быть в позиции 3 на панели вкладок.
Используя этот пример…

Worksheets("Sheet1").Range("A1")
Sheet5.Range("A1")
Worksheets(3).Range("A1")

… все 3 обращаются к одному и тому же рабочему листу только под разными именами.Поэтому лучше использовать значимые имена (а не цифры), чтобы не путать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...