Application.Caller

Программирование на Visual Basic for Applications
Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Application.Caller

Сообщение Евгений Д. » 10.04.2008 (Чт) 19:43

Народ, вот функция, определяющая ID (номер) кликнутой кнопки на коммандной панели в Excel'2003:

Код: Выделить всё
Function GetClickButtonID(ArrCurCaller)

'считаем ID нажатого Control'а, не учитывая разделители (BeginGroup) Application.Caller

Dim BeginGroupCount As Integer

  With Application.CommandBars(ArrCurCaller(2))
 
    For CurCtrl = 1 To .Controls.Count
 
      If .Controls(CurCtrl).BeginGroup Then
     
        BeginGroupCount = BeginGroupCount + 1
     
      End If
     
      If CurCtrl + BeginGroupCount = ArrCurCaller(1) Then Exit For
     
    Next CurCtrl
 
  End With

  GetClickButtonID = CurCtrl

End Function


ArrCurCaller передается из вызывающей программы (обычно это назначенная для данной кнопки VBA-программа) и является результатом вызова Application.Caller, т.е. массивом, где первый элемент - номер контрола на панели (с учетом разделителей), а второй - номер панели в коллекции панелей. Результат работы функции - правильный номер кликнутого контрола (без учета разделитей контролов на панели).
Все работало до установки Service Pack 3. После этого "бедствия" при вызове Application.Caller во втором элементе массива, получаемого по ArrCurCaller, возвращается 0!!! И, соответственно, вся логика работы приведенной выше функции ломается.

Кто про эту фичу что-нибудь знает? Как ее обойти, не откатывая назад Service Pack 3 для MS Office 2003?

Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 106

    TopList  
cron