Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вызов события контрола, если имя контрола неизвестно / 8 сообщений из 8, страница 1 из 1
21.05.2006, 20:19:46
    #33741238
Aijik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов события контрола, если имя контрола неизвестно
Привет!
Никак не могу понять, в VB(A) можно вызвать событие объекта только если известно его имя как константа? Т.е. я знаю имя некоей кнопки я могу написать

Код: plaintext
call MyButton_Click

А если имя-константа мне заранее неизвестно? Если, к примеру, объект был создан динамически, либо нужное имя я могу вычислить лишь динамически в зависимости от каких-либо условий? Допустим у меня есть Frame. В нем CommandButton. Я, к примеру, могу получить ссылку на него через коллекцию Controls фрейма. Можно прочитать св-во Name. Как теперь вызвать Click этой кнопки?
...
Рейтинг: 0 / 0
22.05.2006, 09:37:49
    #33741660
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов события контрола, если имя контрола неизвестно
Попробуй следующий способ с использованием функции CallByName.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Public Sub CommandButton1_Click()
    MsgBox "A"
End Sub

Public Sub CommandButton2_Click()
    MsgBox "B"
End Sub

Private Sub CommandButton3_Click()
    Dim ctl As Control
    
    For Each ctl In Frame1.Controls
        If TypeOf ctl Is CommandButton Then
            CallByName Me, ctl.Name & "_Click", VbMethod
        End If
    Next ctl
End Sub
...
Рейтинг: 0 / 0
22.05.2006, 09:39:32
    #33741666
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов события контрола, если имя контрола неизвестно
в Excel можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub d()
    Dim a As Shape
    Dim aa As String
    For Each a In ActiveSheet.Shapes
        aa = "Лист2." & a.Name & "_click"
        Application.Run aa
    Next

End Sub
...
Рейтинг: 0 / 0
22.05.2006, 14:38:59
    #33742749
Aijik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов события контрола, если имя контрола неизвестно
Спасибо за ответы, но получить искомый результат не удалось :((

Ashton
К сожалению, старого MSDN, чтобы посмотреть как функция CallByName описана в оригинальной документации VB6, у меня сейчас нет, а на msdn.com вообще этого раздела не вижу, описание же функции в справке VBA - куцее. У меня создалось впечатление, что CallByName не наботает с событиями, только методами, т.к. запуская Ваш пример в различных вариантах стабильно получаю Object doesn't support this property or method (Error 438)


vkodor
Я не смог проверить Ваш пример, т.к. не нашел как через Application.Run запустить событие на форме. Можно ли по иерархии объектов Excel добраться до запущенной формы?


Есть ли еще варианты решения проблемы?
...
Рейтинг: 0 / 0
22.05.2006, 15:21:47
    #33742859
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов события контрола, если имя контрола неизвестно
Прикрепи примерчик.
...
Рейтинг: 0 / 0
22.05.2006, 15:31:04
    #33742888
Aijik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов события контрола, если имя контрола неизвестно
Можно взять самый банальный случай - 2 кнопки на форме:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub CommandButton1_Click()
   CallByName Me, "CommandButton2_Click", VbMethod   ' (Error 438)
   CallByName Me.CommandButton2, "Click", VbMethod   ' (Error 438)
End Sub

Private Sub CommandButton2_Click()
   MsgBox "Александр Сергеевич Пушкин"
End Sub
...
Рейтинг: 0 / 0
22.05.2006, 15:45:34
    #33742936
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов события контрола, если имя контрола неизвестно
Сделай процедуру Public.

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub CommandButton1_Click()
   CallByName Me, "CommandButton2_Click", VbMethod
End Sub

Public Sub CommandButton2_Click()
   MsgBox "Александр Сергеевич Пушкин"
End Sub
...
Рейтинг: 0 / 0
22.05.2006, 15:56:19
    #33742969
Aijik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов события контрола, если имя контрола неизвестно
О да! :) Работает! Про Public мысль, признаюсь, возникала, но, к сожалению, не была воспринята как возможный вариант...
Благодарю!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вызов события контрола, если имя контрола неизвестно / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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