MsgBox появляется при открытии любой книги, но только один раз, когда запускаешь Excel
Так может в этом дело - срабатывание происходит для Application. Ну а поскольку отсылка идет к Workbook_Open, то при любом открытии любой книги и срабатывает. Интересно, а можно открыть Эксель без открытия книги и без того, чтобы создать что-то из шаблона? Я не говорю, что знаю решение - я размышляю ...
MsgBox появляется при открытии любой книги, но только один раз, когда запускаешь Excel
Так может в этом дело - срабатывание происходит для Application. Ну а поскольку отсылка идет к Workbook_Open, то при любом открытии любой книги и срабатывает. Интересно, а можно открыть Эксель без открытия книги и без того, чтобы создать что-то из шаблона? Я не говорю, что знаю решение - я размышляю ...WowGun
Но, когда код помещен в надстройку, которая подключена как посоветовал RAN в теме по ссылке (в топике этой темы), макрос перестает срабатывать после первого своего выполнения
Но, когда код помещен в надстройку, которая подключена как посоветовал RAN в теме по ссылке (в топике этой темы), макрос перестает срабатывать после первого своего выполненияSerge_007
А при открытии нового документа, старый открытый, остается открытым? Как то сталкивался с тем, что при закрытии документа, документ закрывался, но в диспетчере задач оставался висеть запущенный эксель...и макрос не срабатывал в следующем документе, пока в диспетчере не завершишь в ручную запущенный эксель ранее. а многопользовательский доступ получился?
А при открытии нового документа, старый открытый, остается открытым? Как то сталкивался с тем, что при закрытии документа, документ закрывался, но в диспетчере задач оставался висеть запущенный эксель...и макрос не срабатывал в следующем документе, пока в диспетчере не завершишь в ручную запущенный эксель ранее. а многопользовательский доступ получился?cmivadwot
Сообщение отредактировал cmivadwot - Пятница, 28.07.2023, 21:57
Serge_007, а если отдельная надстройка для всех книг? у меня всплывает каждый раз... открыл документ всплыло, не закрываешь, открываешь следующий опять всплывает, следующий тоже. при одиночных открытиях тоже. Вот еще была тема Отслеживание события открытия и закрытия книг http://www.excelworld.ru/forum/10-12350-1 Set app = Excel.Application хотя куда я лезу..... и еще заметил.. если галка в настройках с надстройки снята (т.е типа отключил надстройку и она не срабатывает при открытии файлов), но файл надстройки просто открыт, при открытии любых книг бокс всплывает.
прописать в открываемую книгу при ее открытии запускать файл openbox1.xla , то тогда MsgBox всегда будет появляться при открытии любой книги (и не будет всплывать если не открыта книга запускающая openbox1.xla ).
Serge_007, а если отдельная надстройка для всех книг? у меня всплывает каждый раз... открыл документ всплыло, не закрываешь, открываешь следующий опять всплывает, следующий тоже. при одиночных открытиях тоже. Вот еще была тема Отслеживание события открытия и закрытия книг http://www.excelworld.ru/forum/10-12350-1 Set app = Excel.Application хотя куда я лезу..... и еще заметил.. если галка в настройках с надстройки снята (т.е типа отключил надстройку и она не срабатывает при открытии файлов), но файл надстройки просто открыт, при открытии любых книг бокс всплывает.
прописать в открываемую книгу при ее открытии запускать файл openbox1.xla , то тогда MsgBox всегда будет появляться при открытии любой книги (и не будет всплывать если не открыта книга запускающая openbox1.xla ).cmivadwot
Копался тут как-то в книге Уокенбаха "Excel 2010 Профессиональное программирование на VBA" ... Ну интересно же ... Выдержка Глава 19 (стр 611) "Одним из наиболее часто используемых является событие Open объекта WorkBook. Оно возникает при открытии рабочей книги (или надстройки)." Не знаю как там у вас устроено, но может процедура путает событие открытия книги с работой (чтобы работать надо открыть?) надстройки?
Ну так ... размышления в ночи.
Копался тут как-то в книге Уокенбаха "Excel 2010 Профессиональное программирование на VBA" ... Ну интересно же ... Выдержка Глава 19 (стр 611) "Одним из наиболее часто используемых является событие Open объекта WorkBook. Оно возникает при открытии рабочей книги (или надстройки)." Не знаю как там у вас устроено, но может процедура путает событие открытия книги с работой (чтобы работать надо открыть?) надстройки?
может процедура путает событие открытия книги с работой (чтобы работать надо открыть?) надстройки?
Так не "может", а именно это и делает! Если запускать макрос не из надстройки - все работает при каждом открытии любой книги А когда запуск производится из надстройки - срабатывает только один раз(((
В этом-то и вопрос: Как сделать, что бы макрос срабатывал при открытии любого файла?
может процедура путает событие открытия книги с работой (чтобы работать надо открыть?) надстройки?
Так не "может", а именно это и делает! Если запускать макрос не из надстройки - все работает при каждом открытии любой книги А когда запуск производится из надстройки - срабатывает только один раз(((
В этом-то и вопрос: Как сделать, что бы макрос срабатывал при открытии любого файла?Serge_007
прописать в открываемую книгу при ее открытии запускать файл openbox1.xla , то тогда MsgBox всегда будет появляться при открытии любой книги
Тогда теряется весь смысл проекта в целом Ведь надстройка и создана для того что бы в открываемых файлах не писать код Файлов очень много, а в коде возможны изменения...
прописать в открываемую книгу при ее открытии запускать файл openbox1.xla , то тогда MsgBox всегда будет появляться при открытии любой книги
Тогда теряется весь смысл проекта в целом Ведь надстройка и создана для того что бы в открываемых файлах не писать код Файлов очень много, а в коде возможны изменения...Serge_007
У меня не в надстройке, а в Personal в модуле ThisWorkbook прописано сначала в декларациях[vba]
Код
Private WithEvents App As Application ' объявляем объект Application для того, чтобы можно было отлавливать события других книг
[/vba]потом там же [vba]
Код
Private Sub Workbook_Open()' событие при открытии Personal.xls Set App = Application ' назначаем объект Application для того, чтобы можно было отлавливать события других книг End Sub
[/vba]и проверка прочих открываемых книг на стиль ссылок:[vba]
Код
Private Sub App_WorkbookOpen(ByVal WB As Workbook) If Application.ReferenceStyle = xlR1C1 Then If MsgBox("На данный момент стиль ссылок R1C1. Изменить на A1?", vbQuestion + vbYesNo, "Запрос действия") - 7 Then Application.ReferenceStyle = xlA1 End If End Sub
[/vba]Давно мне не присылали документов со стилем ссылок R1C1, поэтому после насильственного перехода на работе с любимого 2003 на 2013 и не обратил внимания, что это перестало работать. Дома на 2003-ем недавно открыл какой-то старый файл со стилем R1C1 - работает! Сегодня на работе на 2013-ом тупо поставил брэкпойнт в процедуре, открыл файл - не останавливается , но почему-то при открытии на мгновение сначала промелькивает открытое окно VBA. Заодно попробовал использовать старорежимный Auto_Open[vba]
Код
Private Sub App_Auto_Open() MsgBox "WorkbookOpen" End Sub
[/vba]Тот же эффект (точнее - нет эффекта) - окно VBA всплывает, но MsgBox не выводится.
У меня не в надстройке, а в Personal в модуле ThisWorkbook прописано сначала в декларациях[vba]
Код
Private WithEvents App As Application ' объявляем объект Application для того, чтобы можно было отлавливать события других книг
[/vba]потом там же [vba]
Код
Private Sub Workbook_Open()' событие при открытии Personal.xls Set App = Application ' назначаем объект Application для того, чтобы можно было отлавливать события других книг End Sub
[/vba]и проверка прочих открываемых книг на стиль ссылок:[vba]
Код
Private Sub App_WorkbookOpen(ByVal WB As Workbook) If Application.ReferenceStyle = xlR1C1 Then If MsgBox("На данный момент стиль ссылок R1C1. Изменить на A1?", vbQuestion + vbYesNo, "Запрос действия") - 7 Then Application.ReferenceStyle = xlA1 End If End Sub
[/vba]Давно мне не присылали документов со стилем ссылок R1C1, поэтому после насильственного перехода на работе с любимого 2003 на 2013 и не обратил внимания, что это перестало работать. Дома на 2003-ем недавно открыл какой-то старый файл со стилем R1C1 - работает! Сегодня на работе на 2013-ом тупо поставил брэкпойнт в процедуре, открыл файл - не останавливается , но почему-то при открытии на мгновение сначала промелькивает открытое окно VBA. Заодно попробовал использовать старорежимный Auto_Open[vba]
Код
Private Sub App_Auto_Open() MsgBox "WorkbookOpen" End Sub
[/vba]Тот же эффект (точнее - нет эффекта) - окно VBA всплывает, но MsgBox не выводится.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 18.08.2023, 11:27
Serge_007, а нельзя прописать открывать окно, при открытии не любого файла, а типа имеющего название... Чтонить типа workbook_open(*.xls) Workbooks.Open(Filename:=NewFiles) Но наверно бред...
Serge_007, а нельзя прописать открывать окно, при открытии не любого файла, а типа имеющего название... Чтонить типа workbook_open(*.xls) Workbooks.Open(Filename:=NewFiles) Но наверно бред...cmivadwot
В том-то и засада, что событие Workbook_Open , как ему и положено, передаётся в модуль ЭтаКнига открываемого файла, но почему-то игнорируется самим приложением, а следовательно и объектом App , подвешенным к нему. :eek:
В том-то и засада, что событие Workbook_Open , как ему и положено, передаётся в модуль ЭтаКнига открываемого файла, но почему-то игнорируется самим приложением, а следовательно и объектом App , подвешенным к нему. :eek:Alex_ST
Serge_007, а не связано все это с окнами? Эксель то типа запущен... А новый файл открывается в новом окне.. а если открыть через меню запущенного файла.. файл-открыть-другой документ эксель.
Serge_007, а не связано все это с окнами? Эксель то типа запущен... А новый файл открывается в новом окне.. а если открыть через меню запущенного файла.. файл-открыть-другой документ эксель.cmivadwot