Страницы: 1
RSS
События для объекта Application
 
Использую UserForm, который скрываю посредством события "Workbook_WindowDeactivate"  
и отображаю "Workbook_WindowActivate". Но при переключении в окно другого приложения эти события не работают.    
В книге прочитал что можно воспользоаться событием для объекта Application, но его нужно активировать. Все описанное проделал, в окне выбора объектов появился новый объект App и события для него, но события для нового объекта не работают.    
   
 
Как правильно активировать события для объекта Application?
 
Для того, чтобы заработало, надо запустить ту рутину, которая задает объект App и которую обычно помещают в модуль книги внутри обработчика события Workbook_Open().
KL
 
В Personal.xls помещаете форму и пишете класс,  для обработки событий с Workbook на уровне Application:  
 
Public WithEvents myBook As Workbook  
Private Sub myBook_Deactivate()  
   UserForm1.Hide  
End Sub  
Private Sub myBook_WindowActivate(ByVal Wn As Window)  
   UserForm1.Show  
End Sub  
 
В всё том же Зукыщтфдючды инициализируете экземпляр созданного вами класса на уровне Application так вот:  
 
Dim NewBook As New Class1  
 
Private Sub Workbook_Open()  
   Set NewBook.myBook = ActiveWorkbook  
End Sub  
(этот код в модуль «Эта книга» на событие Open, при этом модуль класса так и должен называться Class1)
At odd moments: VBA, VB6, VB.NET, Java, Java for Android, Java Script, Action Script, Windows Scriping Host
 
Вот то, о чем я говорил:  
 
Этот код помещают в модуль ЭтаКнига (ThisWorkBook)  
 
'---------------  
Private WithEvents App As Application  
 
Private Sub Workbook_Open()  
   Set App = Application  
End Sub  
'---------------  
 
Но прежде, чем например следующий обработчик заработает, необходимо запустить код наверху.    
 
'---------------  
Private Sub App_NewWorkbook(ByVal Wb As Workbook)  
   MsgBox "New Workbook: " & Wb.Name  
End Sub    
'---------------  
 
Это можно сделать закрыв и открыв книгу, а можно прямо из Редактора VBE, кликнув курсором внутри процедуры и нажав клавишу F5, кнопку  Run Sub/UserForm или через меню Run>Run Sub/UserForm.
KL
 
Можно пример?  
 
В моем примере UserForm хранится в модуле рабочей книги.    
 
Какое событие нужно объявить, чтобы UserForm или другая команда выполнялась при смене фокуса окна Excel на другое приложение?
 
А можно пример, который можно переделать в пример? ;-)
KL
 
Пример выложить не могу, т.к. не ясен ответ.
 
ОК. Вижу, я невнимательно прочитал вопрос. Мне приходит в голову только сочетание таймера и одной из функций Windows API. Внимание! Перед тем как активировать VBE нужно выполнить StopMonitoring()
KL
 
Благодарю!    
Интересный пример, попробую подогнать под свои нужды. Пока неясно как будет себя вести таймер в реальных условиях.    
 
Выходит, через события уровня Application отследить состояние окна Excell невозможно?
 
Насколько я понимаю - нельзя, но могу ошибаться.
KL
 
Вот кстати полезная статья от Chip Pearson с кучей интересных функций в прилагаемом там файле: http://www.cpearson.com/excel/formcontrol.aspx
KL
Страницы: 1
Читают тему
Наверх