Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2012, 21:39   #1
Grif-2009
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию Пользовательские объекты и события

Доброго времени суток уважаемые участники форума!
Помогите пожалуйста новичку, не могу решить проблемку - нужно создавать свои объекты со своими событиями, предлагаю пример задачки ... что здесь не так?

1) Создан модуль - TestModule
который содержит код:


Option Explicit
Public Sub Test()
Dim TestValue As Object
Set TestValue = New My_Class
TestValue.SomeInput = "Test Input"
TestValue.AnyMet
End Sub

2) Создан класс модуль - My_Class
который содержит код:


Option Explicit

'задача проекта отработать создание и вызов собитий
Public Event SomeThing() 'объявление события
Dim SomeValue As String ' декоративная переменная

Public Property Get SomeOutput() As String
MsgBox (SomeValue)
End Property

Public Property Let SomeInput(ByVal vNewValue As String)
SomeValue = vNewValue
End Property

Public Sub AnyMet()
MsgBox (SomeValue & " " & Chr(13) & "попытка работы с событием")
RaiseEvent SomeThing
End Sub

3) Создан класс модуль - My_Event_Hunter
который содержит код:


Public WithEvents AnyValue As My_Class
Private Sub AnyValue_SomeThing()
MsgBox ("Поучилось!!!")
End Sub

Private Sub Class_Initialize()
Set YMis = New My_Class
End Sub

..... Вопрос - Почему не удается обработать событие?
Grif-2009 вне форума Ответить с цитированием
Старый 10.03.2012, 22:17   #2
Grif-2009
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию

Прошу прощения последний блок выглядит так:

Public WithEvents AnyValue As My_Class


Private Sub AnyValue_SomeThing()
MsgBox ("Получилось!!!")
End Sub

Private Sub Class_Initialize()
Set AnyValue = New My_Class
End Sub

... событие не удаётся обработать
Grif-2009 вне форума Ответить с цитированием
Старый 10.03.2012, 22:59   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Вы бы файл Excel со всем этим кодом прикрепили - мы бы уже посказали, в чем проблема.

Найти проблему несложно - а вот создание файла с кодом требует времени
EducatedFool вне форума Ответить с цитированием
Старый 10.03.2012, 23:36   #4
Grif-2009
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию

Прошу прощения ... прилагаю файл.
Вложения
Тип файла: zip ТестСобытий.zip (15.7 Кб, 8 просмотров)
Grif-2009 вне форума Ответить с цитированием
Старый 10.03.2012, 23:43   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Где-то так должно работать,писал в блокноте
My_Class

Код:
 Public Event SomeThing() 
 Dim SomeValue As String ' 

 Public Property Get SomeOutput() As String
 MsgBox (SomeValue)
 End Property

 Public Property Let SomeInput(ByVal vNewValue As String)
 SomeValue = vNewValue
 End Property

 Public Sub AnyMet()
MsgBox (SomeValue & " " & Chr(13) & "попытка работы с событием")
 RaiseEvent SomeThing
 End Sub
My_Event_Hunter
Код:
Public WithEvents AnyValue As My_Class
 Private Sub AnyValue_SomeThing()
MsgBox ("Получилось!!!")
 End Sub

 Private Sub Class_Initialize()
 Set AnyValue = New My_Class
 End Sub
Public Sub Test(SomeInput As String)
 Dim TestValue As Object
 Set TestValue = New My_Class
 AnyValue.SomeInput = SomeInput
 AnyValue.AnyMet
 End Sub
TestModule
Код:
 Public Sub Test()
 Dim TestValue As My_Event_Hunter
 Set TestValue = New My_Event_Hunter
 TestValue.Test "Test Input"
 End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 10.03.2012, 23:53   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Пробуйте, см. каменты
Вложения
Тип файла: rar Grif-2009.rar (9.6 Кб, 36 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 11.03.2012, 00:12   #7
Grif-2009
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию

Здорово !!!
Спасибо большое, работают оба варианта
Немного разный подход, но цель достигнута ... теперь буду разбираться

Ещё раз огромное спасибо !!!
Grif-2009 вне форума Ответить с цитированием
Старый 11.03.2012, 19:31   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Простой пример классов есть тут
http://www.firststeps.ru/vba/excel/r.php?20
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.03.2012, 20:55   #9
Grif-2009
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Простой пример классов есть тут
http://www.firststeps.ru/vba/excel/r.php?20
Спасибо за предложение, посмотрел ссылку, но ссылка не раскрыла сути вопроса, сложность возникла не при создании класса, а при генерации классом события с последующим его перехватом ... возможно ответ был на последующих страницах ....

На сам вопрос ответ мне больше понравился у Казанского, он более ... гибкий что ли и не перекрывает основной класс классом обработки событий.
Grif-2009 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пользовательские флаги TotKtoNado Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 06.01.2012 15:50
Пользовательские функции в MySQL kuzjma SQL, базы данных 2 07.12.2011 11:53
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Пользовательские функции в Excel Elfix Microsoft Office Excel 13 28.10.2009 08:25
Пользовательские окна. HWork Общие вопросы C/C++ 0 27.10.2009 11:29