2012-06-29 6 views
2

Я использую Application.Caller для сравнения в моем коде. Когда пользователь нажимает кнопку commandbutton, я предполагаю, что Application.Caller вернет имя командной кнопки, но не уверен.Дополнительная информация о Application.Caller с VBA в Excel

Я пытаюсь сделать что-то вроде: msgbox (Application.Caller), но понял, что это не правильный тип данных. Как я могу понять, что такое Application.Caller?

+0

НТН http://msdn.microsoft.com/en-us/library/ ff193687.aspx –

+0

Хм ... не совсем уверен, что полностью понимаю. Сравнение, которое я делаю, следующее: 'Если StrComp (Application.Caller, NodeSpanDict.Keys (i), 1) = 0'. Прежде, чем он, казалось, сработал ... но теперь его не работает, когда я пытаюсь получить application.caller в msgbox – Ehudz

ответ

6

Как показано в этом link, Application.Caller не всегда быть String типа

Вы используете StrComp, который сравнивает 2 строки. Я бы рекомендовал использовать это.

Sub Sample() 
    If TypeName(Application.Caller) = "String" Then 
     MsgBox StrComp(Application.Caller, "Button1") 
    End If 
End Sub 

И присвойте этот макрос кнопке формы, которая у вас есть на рабочем листе.

Если вы видите пример, приведенный в ссылке, которую я дал ранее, он автоматически будет ясно к вам :)

Select Case TypeName(Application.Caller) 
    Case "Range" 
     v = Application.Caller.Address 
    Case "String" 
     v = Application.Caller 
    Case "Error" 
     v = "Error" 
    Case Else 
     v = "unknown" 
End Select 
+0

Спасибо Siddharth. На самом деле я решил не использовать Application.Caller в пользу другой переменной, у которой есть строка нажатой кнопки формы. Однако я буду помнить об этом в будущем. Спасибо за разъяснения! – Ehudz

+0

@ Downvoter: Позаботьтесь, чтобы объяснить? –

Смежные вопросы