2016-04-10 3 views
1

Все,Элементы управления формы VBA для функции

Я боролся с этим какое-то время: возможно ли передать объект функции?

Вот что я пытаюсь сделать:

  1. Получить имя которого управления была нажата на форме (как объект?)
  2. Отправить имя элемента управления, чтобы функционировать «MyFunction» (в качестве эталона ?)
  3. Отключить тот же контроль на "MyFunction"

Called из form1:

Private Sub button1_Click() 
    Dim caller As String 
    caller = Form1.ActiveControl.Name 

    MyFunction(caller) 

End Sub 'I'm able to pass it as a string 

button1_Click называет MyFunction и передает вызывающие к нему:

Private Sub MyFunction(caller As String) 
    caller.Enabled = False 
End Sub 

Я понимаю, что это не будет работать как строки. Как я мог сделать это как фактический объект ? Спасибо!

ответ

2

Существует небольшая проблема передачи объекта к югу:

Private Sub Disable(c As Control) 
    MsgBox c.Name 
    c.Enabled = False 
End Sub 

Private Sub CommandButton1_Click() 
    Disable CommandButton1 
End Sub 

Private Sub CommandButton2_Click() 
    Disable CommandButton2 
End Sub 

Private Sub CommandButton3_Click() 
    Disable CommandButton3 
End Sub 

Выше я создал UserForm с тремя кнопками, они говорят, кто они есть при нажатии, а затем отключается.

Обратите внимание, что

Disable CommandButton1 

можно заменить

Disable Me.ActiveControl 

или даже просто

Disable ActiveControl 
+0

Спасибо, Джон. Это определенно решило мою проблему. – Eli

0

Вы можете даже использовать Variant как так (грубый пример):

Private Sub CommandButton1_Click() 
    EnableDisable ActiveControl, "disable" 
End Sub 

Private Sub EnableDisable(control As Variant, status As String) 
    If status = "enabled" Then 
     control.Enabled = True 
    Else 
     control.Enabled = False 
    End If 
End Sub 

Например, пример Джона Коулмана лучше моего.

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