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

Вход

Регистрация

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

 

= Мир MS Excel/Отслеживание события открытия и закртыия книг - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отслеживание события открытия и закртыия книг (Макросы/Sub)
Отслеживание события открытия и закртыия книг
nono4ka Дата: Четверг, 07.08.2014, 08:04 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброго времени суток!
ПРоблема в следующем, есть юзерформ, в лист бокс записываются все открытые книги, необходимо чтобы при закрытии или открытии книг лист бокс автоматически обновлялся (добавлялись или удалялись строки). Сама форма сделана как надстройка в файле xlam. Пробовал обновлять список листбокс через действие click в юзерформ, не подходит, проборвал через enter так же не подходит. Может быть есть способ либо отслеживать действия с книгами либо обновлять список еще как то? и еще, юзер форм не модальная. буду очень благодарен)
 
Ответить
СообщениеДоброго времени суток!
ПРоблема в следующем, есть юзерформ, в лист бокс записываются все открытые книги, необходимо чтобы при закрытии или открытии книг лист бокс автоматически обновлялся (добавлялись или удалялись строки). Сама форма сделана как надстройка в файле xlam. Пробовал обновлять список листбокс через действие click в юзерформ, не подходит, проборвал через enter так же не подходит. Может быть есть способ либо отслеживать действия с книгами либо обновлять список еще как то? и еще, юзер форм не модальная. буду очень благодарен)

Автор - nono4ka
Дата добавления - 07.08.2014 в 08:04
Rioran Дата: Четверг, 07.08.2014, 09:21 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
nono4ka, здравствуйте.

Варианты:

1) Можно с помощью ApplicationOnTime попросить макрос обновлять инфу об открытых книгах каждые, например, 2 минуты. Не очень надёжный метод, но простенький.

2) Можно добавить в каждую книгу макрос, который при открытии/закрытии книги будет редактировать скрытый лист книги с лист-боксом. А лист-бокс будет брать данные из этого списка. Метод более трудолюбивый, но и более надёжный.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщениеnono4ka, здравствуйте.

Варианты:

1) Можно с помощью ApplicationOnTime попросить макрос обновлять инфу об открытых книгах каждые, например, 2 минуты. Не очень надёжный метод, но простенький.

2) Можно добавить в каждую книгу макрос, который при открытии/закрытии книги будет редактировать скрытый лист книги с лист-боксом. А лист-бокс будет брать данные из этого списка. Метод более трудолюбивый, но и более надёжный.

Автор - Rioran
Дата добавления - 07.08.2014 в 09:21
RAN Дата: Четверг, 07.08.2014, 09:41 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Роман, вариантов масса. И совсем не обязательно выбирать самые сложные. :D
Предлагать реализацию событийной процедуры, не зная, что и как работает, т.е. какие события возможны - мартышкин труд.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеРоман, вариантов масса. И совсем не обязательно выбирать самые сложные. :D
Предлагать реализацию событийной процедуры, не зная, что и как работает, т.е. какие события возможны - мартышкин труд.

Автор - RAN
Дата добавления - 07.08.2014 в 09:41
paramedic Дата: Четверг, 07.08.2014, 09:43 | Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 67
Репутация: 6 ±
Замечаний: 0% ±

Excel 2007
У объекта Application есть события WorkbookOpen и WorkbookBeforeClose.
Используем WorkbookOpen для добавления в список, а WorkbookBeforeClose для удаления из списка


Я не ламер - я честный чайник
 
Ответить
СообщениеУ объекта Application есть события WorkbookOpen и WorkbookBeforeClose.
Используем WorkbookOpen для добавления в список, а WorkbookBeforeClose для удаления из списка

Автор - paramedic
Дата добавления - 07.08.2014 в 09:43
Rioran Дата: Четверг, 07.08.2014, 09:49 | Сообщение № 5
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Андрей, привет.

Ты говоришь правильные вещи. Но при этом бледная идея лучше, чем отсутствие таковой. Если бред есть, его можно было бы отсечь, взглянув на файл пользователя (и тут такой пронзительно-выразительный взгляд в сторону nono4ka).


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеАндрей, привет.

Ты говоришь правильные вещи. Но при этом бледная идея лучше, чем отсутствие таковой. Если бред есть, его можно было бы отсечь, взглянув на файл пользователя (и тут такой пронзительно-выразительный взгляд в сторону nono4ka).

Автор - Rioran
Дата добавления - 07.08.2014 в 09:49
RAN Дата: Четверг, 07.08.2014, 10:07 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
На файл смотреть особо не зачем. Что-то мне подсказывает, что события активации формы выше крыши.
Но, конечно, если форма постоянно болтается на экране (неясно зачем?), то, тогда см. №4.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНа файл смотреть особо не зачем. Что-то мне подсказывает, что события активации формы выше крыши.
Но, конечно, если форма постоянно болтается на экране (неясно зачем?), то, тогда см. №4.

Автор - RAN
Дата добавления - 07.08.2014 в 10:07
nono4ka Дата: Четверг, 07.08.2014, 10:22 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Форма болтается для двух целей, первое: когда открыто много книг можно было между ними переключаться, сохранять, закрывать несколько и прочее, и второе это работа с большим количеством листов в одной книге (по аналогии с книгами). Я не могу прописать к каждой книге на действие WorkbookOpen т.к. не знаю какие книги могут открывать, самое действенное это конечно по времени, но и тут свои минусы... хотелось бы именно при открытии/закрытии
К сообщению приложен файл: 8126020.jpg (54.8 Kb)
 
Ответить
СообщениеФорма болтается для двух целей, первое: когда открыто много книг можно было между ними переключаться, сохранять, закрывать несколько и прочее, и второе это работа с большим количеством листов в одной книге (по аналогии с книгами). Я не могу прописать к каждой книге на действие WorkbookOpen т.к. не знаю какие книги могут открывать, самое действенное это конечно по времени, но и тут свои минусы... хотелось бы именно при открытии/закрытии

Автор - nono4ka
Дата добавления - 07.08.2014 в 10:22
RAN Дата: Четверг, 07.08.2014, 10:51 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
В модуль книги надстройки
[vba]
Код
Private WithEvents app As Application

Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
UserForm1.Hide
UserForm1.Show
End Sub

Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
UserForm1.Hide
UserForm1.Show
End Sub

Private Sub Workbook_Open()
Set app = Excel.Application
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВ модуль книги надстройки
[vba]
Код
Private WithEvents app As Application

Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
UserForm1.Hide
UserForm1.Show
End Sub

Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
UserForm1.Hide
UserForm1.Show
End Sub

Private Sub Workbook_Open()
Set app = Excel.Application
End Sub
[/vba]

Автор - RAN
Дата добавления - 07.08.2014 в 10:51
nono4ka Дата: Четверг, 07.08.2014, 12:06 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
RAN, Спасибо огромное, помогло! только вставил в код UserForm!
 
Ответить
СообщениеRAN, Спасибо огромное, помогло! только вставил в код UserForm!

Автор - nono4ka
Дата добавления - 07.08.2014 в 12:06
ikki Дата: Четверг, 07.08.2014, 16:00 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
вставил в код UserForm!
а вот это уже интересно, как тогда "помогло"?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
вставил в код UserForm!
а вот это уже интересно, как тогда "помогло"?

Автор - ikki
Дата добавления - 07.08.2014 в 16:00
Skif-F Дата: Четверг, 07.08.2014, 21:46 | Сообщение № 11
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
как тогда "помогло"?

а почему нет? решающее значение имеет только это:
[vba]
Код
Set app = Excel.Application
[/vba]
 
Ответить
Сообщение
как тогда "помогло"?

а почему нет? решающее значение имеет только это:
[vba]
Код
Set app = Excel.Application
[/vba]

Автор - Skif-F
Дата добавления - 07.08.2014 в 21:46
ikki Дата: Четверг, 07.08.2014, 21:59 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
конечно.
но как выполнится эта строчка, если Sub Workbook_Open() находится не в модуле книги?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеконечно.
но как выполнится эта строчка, если Sub Workbook_Open() находится не в модуле книги?

Автор - ikki
Дата добавления - 07.08.2014 в 21:59
RAN Дата: Четверг, 07.08.2014, 23:02 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Повесить
[vba]
Код
Set app = Excel.Application
[/vba]
на инициализацию формы. Нет?
А мое мнение см. №3. :D


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПовесить
[vba]
Код
Set app = Excel.Application
[/vba]
на инициализацию формы. Нет?
А мое мнение см. №3. :D

Автор - RAN
Дата добавления - 07.08.2014 в 23:02
anvg Дата: Пятница, 08.08.2014, 08:43 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
Цитата
но как выполнится эта строчка, если Sub Workbook_Open() находится не в модуле книги?

В немодальной форме
[vba]
Код
Private WithEvents app As Excel.Application

Private Sub app_NewWorkbook(ByVal Wb As Workbook)
       MsgBox Wb.Name & " создана"
End Sub

Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
       MsgBox Wb.Name & " закрывается"
End Sub

Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
       MsgBox Wb.Name & " открывается"
End Sub

Private Sub UserForm_Initialize()
       Set app = Application
End Sub
[/vba]
Хотя и будет работать в пределах того экземпляра Excel, книга которого содержит форму.


Сообщение отредактировал anvg - Пятница, 08.08.2014, 08:45
 
Ответить
СообщениеДоброе время суток
Цитата
но как выполнится эта строчка, если Sub Workbook_Open() находится не в модуле книги?

В немодальной форме
[vba]
Код
Private WithEvents app As Excel.Application

Private Sub app_NewWorkbook(ByVal Wb As Workbook)
       MsgBox Wb.Name & " создана"
End Sub

Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
       MsgBox Wb.Name & " закрывается"
End Sub

Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
       MsgBox Wb.Name & " открывается"
End Sub

Private Sub UserForm_Initialize()
       Set app = Application
End Sub
[/vba]
Хотя и будет работать в пределах того экземпляра Excel, книга которого содержит форму.

Автор - anvg
Дата добавления - 08.08.2014 в 08:43
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отслеживание события открытия и закртыия книг (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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