powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Программное назначение событий
10 сообщений из 10, страница 1 из 1
Программное назначение событий
    #32780183
RodionD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как при программном создании листа Excel, запихнуть в него обработчики событий, например на активацию?
...
Рейтинг: 0 / 0
Программное назначение событий
    #32782006
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кладешь в модуль
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Option Explicit
Public WithEvents objSheet As Excel.Worksheet
Public Sub myEvent()
    Set objSheet = ThisWorkbook.Worksheets.Add
    objSheet.Activate
End Sub

Private Sub objSheet_Activate()
    MsgBox "Hello", vbInformation, "Event"
End Sub
...
Рейтинг: 0 / 0
Программное назначение событий
    #32782170
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идет именно о программном управлении обработчиками событий - то у объекта Excel.Worksheet есть скрытые св-ва OnSheetActivate, OnSheetDeactivate, OnEntry, OnDoubleClick, OnData, OnCalculate. Через них и можно любой обработчик назначить.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Программное назначение событий
    #33938041
А в Аутлуке как такое можно сделать...?

ClassModule с кодом

Dim myOlApp As New Outlook.Application
Public WithEvents myOlItems As Outlook.Items

Public Sub Initialize_handler()
Set myOlItems = myOlApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts).Items
End Sub

Private Sub myOlItems_ItemAdd(ByVal Item As Object)
Dim myOlMItem As Outlook.MailItem
Dim myOlAtts As Outlook.Attachments
Set myOlMItem = myOlApp.CreateItem(olMailItem)
myOlMItem.Save
Set myOlAtts = myOlMItem.Attachments
' Add new contact to attachments in mail message
myOlAtts.Add Item, olByValue
myOlMItem.To = "Sales Team"
myOlMItem.Subject = "New contact"
myOlMItem.Save
End Sub
не работает.... на появление нового контакта никакой реакции
...
Рейтинг: 0 / 0
Программное назначение событий
    #33939090
Кстати говоря предыдущий пример с Ёкселем тоже не сработал
(когда строка Public WithEvents objSheet As Excel.Worksheet лежит в модуле - ругань на нее : only valid in object module, когда я ее кладу в класс-модуль и вызываю через объект класса - объект не создается - синтаксическая ошибка). мож что еще с настройками не так? (Хотя ссылки на объектную модель есть...)
...
Рейтинг: 0 / 0
Программное назначение событий
    #33939164
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Яна КарповаКстати говоря предыдущий пример с Ёкселем тоже не сработал
(когда строка Public WithEvents objSheet As Excel.Worksheet лежит в модуле - ругань на нее : only valid in object module, когда я ее кладу в класс-модуль и вызываю через объект класса - объект не создается - синтаксическая ошибка). мож что еще с настройками не так? (Хотя ссылки на объектную модель есть...)
Все правильно, конструкция типа

Код: plaintext
Public WithEvents objSheet As Excel.Worksheet

должна быть объявлена в модуле класса.

Покажите, как вы создаете экземпляр класса (хотя, лучше полный код), где у вас возникает ошибка.
...
Рейтинг: 0 / 0
Программное назначение событий
    #33939261
Это в класс-модуль EventHandler
Public WithEvents objSheet As Excel.Worksheet
Private Sub objSheet_Activate()
MsgBox "Hello", vbInformation, "Event"
End Sub

Это в модуль
Option Explicit
Dim myEventHandler As EventHandler
Public Sub myEvent()
Set myEventHandler.objSheet = ThisWorkbook.Worksheets.Add
myEventHandler.objSheet.Activate
End Sub

Причем ObjectBrowser видит класс EventHandler.
Тем не менее попытка запустить модуль вызвала сообщение :
object variable or With block variable not set
...
Рейтинг: 0 / 0
Программное назначение событий
    #33939315
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В модуле, вместо

Код: plaintext
Dim myEventHandler As EventHandler

запиши

Код: plaintext
Dim myEventHandler As New EventHandler
...
Рейтинг: 0 / 0
Программное назначение событий
    #33939383
Это отработало....

Dim myEventHandler As New EventHandler
Public Sub myEvent()
Set myEventHandler.objSheet = ActiveWorkbook.Worksheets(1)
myEventHandler.objSheet.Activate
End Sub

А это нет - метод Add как-то не так используется (наверное имело смысл проинициализировать объект лист)
Dim myEventHandler As New EventHandler
Public Sub myEvent()
Set myEventHandler.objSheet = ActiveWorkbook.Worksheets.Add
myEventHandler.objSheet.Activate
End Sub
---------------
Но обработчик вызвался и это главное. Спасибо огромное ))))
...
Рейтинг: 0 / 0
Программное назначение событий
    #33939455
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С Add, тоже должно все нормально работать. Просто сообщение не появляется, т.к. добавленный лист уже активен.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim myEventHandler As New EventHandler

Public Sub myEvent()
    Set myEventHandler.objSheet = ThisWorkbook.Worksheets.Add
    
    ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Activate
    
    myEventHandler.objSheet.Activate
End Sub
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Программное назначение событий
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]