2016-04-10 7 views
1

すべて、VBAフォーム関数のコントロールへの変換

私はしばらくこの問題に取り組んできました。オブジェクトを関数に渡すことは可能ですか?参照として

  1. は、コントロールの名前を取得します(オブジェクトとして?)フォームに押された
  2. 「MyFunctionを」を機能するように、コントロールの名前を送る(:ここ

    私が達成しようとしているものですが?)

  3. 無効にすることををForm1から呼び出され、 "MyFunctionを"

で同じコントロール:

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 

MyFunctionをを呼び出し、それに、発信者を渡しのbutton1_Click:

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 

は、彼らがクリックされたとき、彼らが誰であるかと言うと、その後無効になっています。

Disable CommandButton1 

Disable Me.ActiveControl 

または置き換えることができ

注ことだけ

Disable ActiveControl 
+0

ありがとうジョン。これは間違いなく私の問題を解決しました。 – Eli

0

あなたもそう(ラフ例)のようなバリアントを使用することができます。

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 

John Colemanの例は私よりも優れています。

関連する問題