Ответ 1
Убедитесь, что подпрограмма Private Sub Workbook_Open() вставлена внутри объекта This Workbook, а не в объект Module, Form или Sheet.
Эта программа должна создать кнопку, которую пользователь может нажать, чтобы активировать другой суб. Из моих поисков в Интернете кажется, что нижеприведенная подзапись должна активироваться при открытии книги, но это не так?
Что я делаю не так?
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
Убедитесь, что подпрограмма Private Sub Workbook_Open() вставлена внутри объекта This Workbook, а не в объект Module, Form или Sheet.
Интересно. В 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
Я знаю, что это сообщение какое-то время было бездействующим, но я просто много часов боролся, чтобы решить эту проблему. Это самая странная вещь, но я наконец заметил, что один из моих рабочих листов был в "Page View"... и как только я включил его в "Normal", моя рабочая функция Workbook_Open() снова начала работать как обычно. ОЧЕНЬ СТРАН - определенно ошибка Excel... просто рад, что я, наконец, решил это... Надеюсь, это поможет кому-то...
Решение, которое я нашел, выполняло нижеприведенный код, а затем действие "Открыть" работало.
Sub EventRestore()
Application.EnableEvents = True
End Sub
Как и в случае с событием Nazim через кодовое решение, я обнаружил следующее исправление:
закрытие всех книг Excel и окон VBA и повторное открытие с Workbook_Open()
решило эту проблему.
(вероятно, из-за события, включающего аналогичное решение Назима, связанное выше).
Поскольку я отлаживал и прерывал выполнение, я отключал события в работающем коде перед прерыванием. Сначала я не заметил этого обстоятельства, и даже после закрытия/повторного открытия моей книги это не сработало...
... Другие открытые книги Excel или какой-то глобальный экземпляр каким-то образом "запомнили", что события вновь открытой книги были отключены.
Мое решение было немного неясным, и я даже сейчас не помню, почему оно пришло мне в голову как потенциальное решение. Созданный мной файл, в котором макрос Workbook_Open() не запускается, я изначально создал, выполнив следующие действия:
По какой-то причине я подумал, что моя проблема связана с тем, что файл "запускается как" стандарт .xlsx. Так что я просто:
В отличие от оригинальной Workbook_1, новая Workbook_2 успешно запустила подпункт Workbook_Open() при открытии. Возможно, потенциальная причина этой проблемы связана с историей типов файлов (т.е. если в какой-то момент это был тип, который не может запускать макросы). Или, может быть, просто попытаться снова с новым файлом - вот что решило эту проблему для меня. В любом случае, это может сработать для любого, для кого другие решения не сработали.