2017-12-28 11 views
0

、そこCommandButton1という、2、3、4、5、6 ........あり、それらはすべて同じタスクを実行する例:。Range("A1").value = "Good"ここ2つのコントロール用に1つのコードを書く?例えば2つのCommandButton私のユーザーフォームで

質問には、私はちょうどそれらのすべてのための1つのコードを書くことができる方法はありますか?

答えが「はい」の場合、範囲変数を作成できますか?例:CommandButton1:range( "A1")。value = "Good"、CommandButton2:範囲( "A2")。値= "Good"。

ご回答いただきありがとうございます。

答えて

0

VBAには高度なイベントモデルがありません。代わりに、サブはその結果を決定する必要があることを特定の引数を渡して、共通のサブプロシージャを作成し、呼び出すことができます。パラメータは文字列である必要はありません

Private Sub CommandButton1_Click() 
    Call Clicker("A1") 
End Sub 

Private Sub CommandButton2_Click() 
    Call Clicker("A2") 
End Sub 

Private Sub Clicker(sRange As String) 
    'MsgBox sRange 
    Range(sRange).Value = "Good" 
End Sub 

、それは可能性がありa Range

値 "A1"などは、(引数として渡すのではなく)フォームのプロパティとして格納して取得することができます。値(s)は、クリックされた固有である可能性が高いとして、

Private Sub Clicker() 
    MsgBox ActiveControl.Name 
    'do something according to the name 
End Sub 

私はこれが好きではないし、最初の選択肢を好む:

可能な代替はActiveControlをチェックし、それに応じて動作するようにですボタンをクリックします(ボタンの名前が変わることがあります)。関連するボタンがアクティブでなくてもコードを呼び出すことができます。

第3の選択肢は、独自のカスタムクラスとイベントモデルを作成することです。これにはいくつかの調査が必要です。


ここでユーザーフォームのカスタムプロパティを使用した例である。

Private sCellOfInterest As String 

Private Property Get CellOfInterest() As String 
    CellOfInterest = sCellOfInterest 
End Property 

Private Property Let CellOfInterest(ByVal sRange As String) 
    sCellOfInterest = sRange 
End Property 


Private Sub CommandButton1_Click() 
    CellOfInterest = "A1" 
    Call Clicker2 
End Sub 

Private Sub CommandButton2_Click() 
    CellOfInterest = "A2" 
    Call Clicker2 
End Sub 


Private Sub Clicker2() 
    MsgBox CellOfInterest 
End Sub 

は再び、プロパティは、オブジェクトではなく、文字列であってもよいし、Property SetProperty Letではなく、使用されるであろう。

+0

こんにちはAndy G あなたの答えは、excel vbaのコードを大幅に短縮しました。 ありがとうございます。 – kan

関連する問題