1

У меня есть рабочая тетрадь с несколькими листами (вкладками). Я добавил приведенный ниже код в попытке показать вкладку "Панель инструментов" каждый раз, когда кто-то открывает электронную таблицу.

Private Sub Workbook_Open()
    ActiveWorkbook.Sheets("Dashboard").Activate
End Sub

Когда я открываю электронную таблицу, мне представляется баннер PROTECTED VIEW . Я нажимаю "Включить редактирование" и затем получаю следующую ошибку:

Ошибка времени выполнения 91: переменная объекта или переменная блока не установлены

Я также попробовал другой вариант, основанный на документации по MSDN:

Private Sub Workbook_Open()
    Worksheets("Dashboard").Activate
End Sub

Это привело к другой ошибке:

Ошибка выполнения 1004: не удалось активировать метод класса Worksheet

2 ответа2

3

Это происходит главным образом потому, что рабочая книга не "готова" к выполнению. Но вы можете использовать трюк здесь:

В модуле:

Public Sub InitActive()
  ActiveWorkbook.Sheets("Dashboard").Activate
End Sub

И измените ваш начальный макрос на:

Private Sub Workbook_Open()
  Application.OnTime Now, "InitActive"
End Sub

Заявка.OnTime молча ждет, пока excel сообщит, что он "готов" ... таким образом, ошибки не должны появляться ... Тем не менее вы должны использовать кодовое имя, как Sheet3.Activate (если вы понимаете, о чем я)

1

По-видимому, эта известная проблема затрагивает выпуск Excel 2013 Office 365 и является причиной моих проблем.

Исправление состоит в том, чтобы переместить Activate в событие Workbook_Activate() вместо Workbook_Open():

Private Sub Workbook_Activate()
  Sheet1.Activate
End Sub

Private Sub Workbook_Open()

End Sub

Теперь все отлично работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .