Workbook_Open не будет работать, когда я открою книгу?

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

Что я делаю не так?

Option Explicit
Private Sub Workbook_Open()
Dim btn As Button
Dim rng As Range
With Worksheets("Sheet1")
    Set rng = .Range("B2:C2")
        Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
    With btn
        .Caption = "To begin the program, please click this button"
        .AutoSize = True
        .OnAction = "TableCreation1"
    End With
End With
End Sub

Ответ 1

Убедитесь, что подпрограмма Private Sub Workbook_Open() вставлена внутри объекта This Workbook, а не в объект Module, Form или Sheet.

Ответ 2

Интересно. В 2009 году описан конфликт с условным форматированием открываемого листа, как в посте vbforum.

Похоже, что эта ошибка все еще существует в Excel и предотвращает workbook_open события workbook_open. У меня есть книги (старый XLS-двоичный формат), который просто не срабатывает событие в Excel 2003 и 2007, но делает в 2013 году я удалил все условное форматирование с первым листом, но все еще не мог получить workbook_open процедуры для запуска в старшей Excel -Versions.

Обходной путь, который я использую в распределенных рабочих книгах, заключается в использовании локальной переменной и второго события в рабочей книге следующим образом:

''
' private variable
Private wbOpenEventRun as Boolean

''
' procedure to be called by excel when workbook opens
Private Sub Workbook_Open()
    wbOpenEventRun = true
    ' perform tasks
End Sub

''
' the selection change event fires usually.
' performance is not reduced
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Not wbOpenEventRun Then Workbook_Open
    ' perform tasks in reaction of selection change events, if required
End Sub

Ответ 3

Я знаю, что это сообщение какое-то время было бездействующим, но я просто много часов боролся, чтобы решить эту проблему. Это самая странная вещь, но я наконец заметил, что один из моих рабочих листов был в "Page View"... и как только я включил его в "Normal", моя рабочая функция Workbook_Open() снова начала работать как обычно. ОЧЕНЬ СТРАН - определенно ошибка Excel... просто рад, что я, наконец, решил это... Надеюсь, это поможет кому-то...

Ответ 4

Решение, которое я нашел, выполняло нижеприведенный код, а затем действие "Открыть" работало.

Sub EventRestore()

    Application.EnableEvents = True

End Sub

Ответ 5

Как и в случае с событием Nazim через кодовое решение, я обнаружил следующее исправление:

исправление

закрытие всех книг Excel и окон VBA и повторное открытие с Workbook_Open() решило эту проблему.
(вероятно, из-за события, включающего аналогичное решение Назима, связанное выше).

проблемный опыт

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

вероятная причина

... Другие открытые книги Excel или какой-то глобальный экземпляр каким-то образом "запомнили", что события вновь открытой книги были отключены.

Ответ 6

Мое решение было немного неясным, и я даже сейчас не помню, почему оно пришло мне в голову как потенциальное решение. Созданный мной файл, в котором макрос Workbook_Open() не запускается, я изначально создал, выполнив следующие действия:

  1. Щелкните правой кнопкой мыши в соответствующей папке, выберите Новый, нажмите Рабочий лист Microsoft Excel.
  2. Назван файл "Рабочая книга_1".
  3. Открыта Рабочая тетрадь_1.
  4. Файл, Сохранить как, изменил тип файла на Книга с поддержкой макросов Excel (*.xlsm), Сохранить.
  5. Написал код VBA, включая Workbook_Open(), вложенный в ThisWorkbook.

По какой-то причине я подумал, что моя проблема связана с тем, что файл "запускается как" стандарт .xlsx. Так что я просто:

  1. Открыл новую пустую книгу в Excel (Book1).
  2. Файл, Сохранить как, введите Рабочая книга_2, изменил тип файла на Макросъемка Excel с поддержкой (*.xlsm), Сохранить.
  3. Скопировал код и структуру VBA из оригинальной Рабочей книги_1.

В отличие от оригинальной Workbook_1, новая Workbook_2 успешно запустила подпункт Workbook_Open() при открытии. Возможно, потенциальная причина этой проблемы связана с историей типов файлов (т.е. если в какой-то момент это был тип, который не может запускать макросы). Или, может быть, просто попытаться снова с новым файлом - вот что решило эту проблему для меня. В любом случае, это может сработать для любого, для кого другие решения не сработали.