Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запуск макроса из надстройки при открытии любого файла - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Запуск макроса из надстройки при открытии любого файла
Serge_007 Дата: Четверг, 27.07.2023, 16:12 | Сообщение № 1
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Всем привет

Корни этой темы берутся из темы Реализовать многопользовательский доступ к файлу с макросами

Что есть:
Надстройка, в модуле книги которой, размещен код:
[vba]
Код
Private WithEvents App As Application

Private Sub Workbook_Open()
    Set App = Application
End Sub

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    MsgBox "!"
End Sub
[/vba]

Требуется: Что бы MsgBox всегда появлялся при открытии любой книги

Что происходит по факту: MsgBox появляется при открытии любой книги, но только один раз, когда запускаешь Excel

Вопрос: Почему так происходит и как добиться правильной работы кода?

Спасибо


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеВсем привет

Корни этой темы берутся из темы Реализовать многопользовательский доступ к файлу с макросами

Что есть:
Надстройка, в модуле книги которой, размещен код:
[vba]
Код
Private WithEvents App As Application

Private Sub Workbook_Open()
    Set App = Application
End Sub

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    MsgBox "!"
End Sub
[/vba]

Требуется: Что бы MsgBox всегда появлялся при открытии любой книги

Что происходит по факту: MsgBox появляется при открытии любой книги, но только один раз, когда запускаешь Excel

Вопрос: Почему так происходит и как добиться правильной работы кода?

Спасибо

Автор - Serge_007
Дата добавления - 27.07.2023 в 16:12
WowGun Дата: Четверг, 27.07.2023, 18:09 | Сообщение № 2
Группа: Проверенные
Ранг: Новичок
Сообщений: 45
Репутация: 19 ±
Замечаний: 0% ±

Excel 2016
MsgBox появляется при открытии любой книги, но только один раз, когда запускаешь Excel

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


УЧИТЕСЬ ... спрашивать.
 
Ответить
Сообщение
MsgBox появляется при открытии любой книги, но только один раз, когда запускаешь Excel

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

Автор - WowGun
Дата добавления - 27.07.2023 в 18:09
Serge_007 Дата: Пятница, 28.07.2023, 09:10 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
в этом дело - срабатывание происходит для Application
Разумеется)

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


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
в этом дело - срабатывание происходит для Application
Разумеется)

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

Автор - Serge_007
Дата добавления - 28.07.2023 в 09:10
and_evg Дата: Пятница, 28.07.2023, 10:21 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 460
Репутация: 77 ±
Замечаний: 0% ±

Excel 2007
Привет.
Но макрос не срабатывает...

Странно этот код у меня срабатывает при каждом открытии любой книги...
К сообщению приложен файл: kniga10.xlsm (11.6 Kb)
 
Ответить
СообщениеПривет.
Но макрос не срабатывает...

Странно этот код у меня срабатывает при каждом открытии любой книги...

Автор - and_evg
Дата добавления - 28.07.2023 в 10:21
Serge_007 Дата: Пятница, 28.07.2023, 10:50 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
этот код у меня срабатывает при каждом открытии любой книги
Разумеется)

Что есть:
Надстройка
Но, когда код помещен в надстройку, которая подключена как посоветовал RAN в теме по ссылке (в топике этой темы), макрос перестает срабатывать после первого своего выполнения


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
этот код у меня срабатывает при каждом открытии любой книги
Разумеется)

Что есть:
Надстройка
Но, когда код помещен в надстройку, которая подключена как посоветовал RAN в теме по ссылке (в топике этой темы), макрос перестает срабатывать после первого своего выполнения

Автор - Serge_007
Дата добавления - 28.07.2023 в 10:50
WowGun Дата: Пятница, 28.07.2023, 12:40 | Сообщение № 6
Группа: Проверенные
Ранг: Новичок
Сообщений: 45
Репутация: 19 ±
Замечаний: 0% ±

Excel 2016
Я подразумевал, что объектом должен быть не Application, а Application.Workbooks.
Опять же ... размышления.


УЧИТЕСЬ ... спрашивать.
 
Ответить
СообщениеЯ подразумевал, что объектом должен быть не Application, а Application.Workbooks.
Опять же ... размышления.

Автор - WowGun
Дата добавления - 28.07.2023 в 12:40
Serge_007 Дата: Пятница, 28.07.2023, 13:38 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
К сообщению приложен файл: 7937431.png (140.1 Kb)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеИсходил из этого: Как отследить закрытие другой книги?


Автор - Serge_007
Дата добавления - 28.07.2023 в 13:38
cmivadwot Дата: Пятница, 28.07.2023, 18:00 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 531
Репутация: 96 ±
Замечаний: 0% ±

365
А при открытии нового документа, старый открытый, остается открытым? Как то сталкивался с тем, что при закрытии документа, документ закрывался, но в диспетчере задач оставался висеть запущенный эксель...и макрос не срабатывал в следующем документе, пока в диспетчере не завершишь в ручную запущенный эксель ранее. а многопользовательский доступ получился?


Сообщение отредактировал cmivadwot - Пятница, 28.07.2023, 21:57
 
Ответить
СообщениеА при открытии нового документа, старый открытый, остается открытым? Как то сталкивался с тем, что при закрытии документа, документ закрывался, но в диспетчере задач оставался висеть запущенный эксель...и макрос не срабатывал в следующем документе, пока в диспетчере не завершишь в ручную запущенный эксель ранее. а многопользовательский доступ получился?

Автор - cmivadwot
Дата добавления - 28.07.2023 в 18:00
cmivadwot Дата: Воскресенье, 30.07.2023, 18:16 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 531
Репутация: 96 ±
Замечаний: 0% ±

365
Serge_007,
а если отдельная надстройка для всех книг? у меня всплывает каждый раз... открыл документ всплыло, не закрываешь, открываешь следующий опять всплывает, следующий тоже. при одиночных открытиях тоже.
Вот еще была тема Отслеживание события открытия и закрытия книг http://www.excelworld.ru/forum/10-12350-1 Set app = Excel.Application
хотя куда я лезу.....
и еще заметил.. если галка в настройках с надстройки снята (т.е типа отключил надстройку и она не срабатывает при открытии файлов), но файл надстройки просто открыт, при открытии любых книг бокс всплывает.
Надстройка, в модуле книги которой, размещен код:

прописать в открываемую книгу при ее открытии запускать файл openbox1.xla , то тогда MsgBox всегда будет появляться при открытии любой книги (и не будет всплывать если не открыта книга запускающая openbox1.xla ).
К сообщению приложен файл: openbox1.xla (26.5 Kb)


Сообщение отредактировал cmivadwot - Воскресенье, 30.07.2023, 23:41
 
Ответить
СообщениеSerge_007,
а если отдельная надстройка для всех книг? у меня всплывает каждый раз... открыл документ всплыло, не закрываешь, открываешь следующий опять всплывает, следующий тоже. при одиночных открытиях тоже.
Вот еще была тема Отслеживание события открытия и закрытия книг http://www.excelworld.ru/forum/10-12350-1 Set app = Excel.Application
хотя куда я лезу.....
и еще заметил.. если галка в настройках с надстройки снята (т.е типа отключил надстройку и она не срабатывает при открытии файлов), но файл надстройки просто открыт, при открытии любых книг бокс всплывает.
Надстройка, в модуле книги которой, размещен код:

прописать в открываемую книгу при ее открытии запускать файл openbox1.xla , то тогда MsgBox всегда будет появляться при открытии любой книги (и не будет всплывать если не открыта книга запускающая openbox1.xla ).

Автор - cmivadwot
Дата добавления - 30.07.2023 в 18:16
WowGun Дата: Четверг, 17.08.2023, 23:37 | Сообщение № 10
Группа: Проверенные
Ранг: Новичок
Сообщений: 45
Репутация: 19 ±
Замечаний: 0% ±

Excel 2016
Копался тут как-то в книге Уокенбаха "Excel 2010 Профессиональное программирование на VBA" ... Ну интересно же ...
Выдержка Глава 19 (стр 611)
"Одним из наиболее часто используемых является событие Open объекта WorkBook. Оно возникает при открытии рабочей книги (или надстройки)."
Не знаю как там у вас устроено, но может процедура путает событие открытия книги с работой (чтобы работать надо открыть?) надстройки?

Ну так ... размышления в ночи.


УЧИТЕСЬ ... спрашивать.
 
Ответить
СообщениеКопался тут как-то в книге Уокенбаха "Excel 2010 Профессиональное программирование на VBA" ... Ну интересно же ...
Выдержка Глава 19 (стр 611)
"Одним из наиболее часто используемых является событие Open объекта WorkBook. Оно возникает при открытии рабочей книги (или надстройки)."
Не знаю как там у вас устроено, но может процедура путает событие открытия книги с работой (чтобы работать надо открыть?) надстройки?

Ну так ... размышления в ночи.

Автор - WowGun
Дата добавления - 17.08.2023 в 23:37
Serge_007 Дата: Пятница, 18.08.2023, 00:52 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
может процедура путает событие открытия книги с работой (чтобы работать надо открыть?) надстройки?
Так не "может", а именно это и делает!
Если запускать макрос не из надстройки - все работает при каждом открытии любой книги
А когда запуск производится из надстройки - срабатывает только один раз(((

В этом-то и вопрос: Как сделать, что бы макрос срабатывал при открытии любого файла?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
может процедура путает событие открытия книги с работой (чтобы работать надо открыть?) надстройки?
Так не "может", а именно это и делает!
Если запускать макрос не из надстройки - все работает при каждом открытии любой книги
А когда запуск производится из надстройки - срабатывает только один раз(((

В этом-то и вопрос: Как сделать, что бы макрос срабатывал при открытии любого файла?

Автор - Serge_007
Дата добавления - 18.08.2023 в 00:52
Serge_007 Дата: Пятница, 18.08.2023, 00:58 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
прописать в открываемую книгу при ее открытии запускать файл openbox1.xla , то тогда MsgBox всегда будет появляться при открытии любой книги

Тогда теряется весь смысл проекта в целом
Ведь надстройка и создана для того что бы в открываемых файлах не писать код
Файлов очень много, а в коде возможны изменения...


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
прописать в открываемую книгу при ее открытии запускать файл openbox1.xla , то тогда MsgBox всегда будет появляться при открытии любой книги

Тогда теряется весь смысл проекта в целом
Ведь надстройка и создана для того что бы в открываемых файлах не писать код
Файлов очень много, а в коде возможны изменения...

Автор - Serge_007
Дата добавления - 18.08.2023 в 00:58
Alex_ST Дата: Пятница, 18.08.2023, 10:56 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
У меня не в надстройке, а в 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 не выводится.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Пятница, 18.08.2023, 11:27
 
Ответить
СообщениеУ меня не в надстройке, а в 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
Дата добавления - 18.08.2023 в 10:56
cmivadwot Дата: Пятница, 18.08.2023, 12:12 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 531
Репутация: 96 ±
Замечаний: 0% ±

365
Serge_007, а нельзя прописать открывать окно, при открытии не любого файла, а типа имеющего название... Чтонить типа workbook_open(*.xls)
Workbooks.Open(Filename:=NewFiles)
Но наверно бред...
 
Ответить
СообщениеSerge_007, а нельзя прописать открывать окно, при открытии не любого файла, а типа имеющего название... Чтонить типа workbook_open(*.xls)
Workbooks.Open(Filename:=NewFiles)
Но наверно бред...

Автор - cmivadwot
Дата добавления - 18.08.2023 в 12:12
Serge_007 Дата: Пятница, 18.08.2023, 12:18 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
при открытии не любого файла
Надо-то при открытии любого...


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
при открытии не любого файла
Надо-то при открытии любого...

Автор - Serge_007
Дата добавления - 18.08.2023 в 12:18
cmivadwot Дата: Пятница, 18.08.2023, 12:30 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 531
Репутация: 96 ±
Замечаний: 0% ±

365
Надо-то при открытии любого...

Так типа и будет любой...но отсечка по имени.. другое имя и запуск..
Просто предположение...


Сообщение отредактировал cmivadwot - Пятница, 18.08.2023, 12:31
 
Ответить
Сообщение
Надо-то при открытии любого...

Так типа и будет любой...но отсечка по имени.. другое имя и запуск..
Просто предположение...

Автор - cmivadwot
Дата добавления - 18.08.2023 в 12:30
Serge_007 Дата: Пятница, 18.08.2023, 13:53 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
любой...но отсечка по имени
Значит я мысль не понял...


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
любой...но отсечка по имени
Значит я мысль не понял...

Автор - Serge_007
Дата добавления - 18.08.2023 в 13:53
Alex_ST Дата: Пятница, 18.08.2023, 14:47 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Чтонить типа workbook_open(*.xls)
В том-то и засада, что событие Workbook_Open , как ему и положено, передаётся в модуль ЭтаКнига открываемого файла, но почему-то игнорируется самим приложением, а следовательно и объектом App , подвешенным к нему.
:eek:



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Чтонить типа workbook_open(*.xls)
В том-то и засада, что событие Workbook_Open , как ему и положено, передаётся в модуль ЭтаКнига открываемого файла, но почему-то игнорируется самим приложением, а следовательно и объектом App , подвешенным к нему.
:eek:

Автор - Alex_ST
Дата добавления - 18.08.2023 в 14:47
cmivadwot Дата: Суббота, 19.08.2023, 15:13 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 531
Репутация: 96 ±
Замечаний: 0% ±

365
Serge_007, а не связано все это с окнами? Эксель то типа запущен... А новый файл открывается в новом окне.. а если открыть через меню запущенного файла.. файл-открыть-другой документ эксель.
 
Ответить
СообщениеSerge_007, а не связано все это с окнами? Эксель то типа запущен... А новый файл открывается в новом окне.. а если открыть через меню запущенного файла.. файл-открыть-другой документ эксель.

Автор - cmivadwot
Дата добавления - 19.08.2023 в 15:13
Serge_007 Дата: Суббота, 19.08.2023, 17:29 | Сообщение № 20
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
не связано все это с окнами?
Не должно
Объект Window в коде не используется, а Workbook_Open должно реагировать только на открытие книг (в любом окне)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
не связано все это с окнами?
Не должно
Объект Window в коде не используется, а Workbook_Open должно реагировать только на открытие книг (в любом окне)

Автор - Serge_007
Дата добавления - 19.08.2023 в 17:29
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!