• 締切済み

Excel エクセル VBA

シート上にボタンが5つあり、一部の処理は全て共通となっております。共通処理のコードが長いため修正があると全て治す必要があるためクラスモジュールで共通処理を呼び出すようにしたいです。クラスモジュールを使ったことがないので教えてください。 ボタンはActiveXコントロールを使用しています。

みんなの回答

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.5

単に共通のコードを一つにしたいというだけでしたら No.2で回答した Sub TestFunction() のパターンで十分だと思います。 また、ひとつのモジュールの中で共通のコードを別々に扱いたい場合だとClass利用が便利だと思います。 以下、下手で単純な例ですが、同じClassのコードで二つの違うメッセージを干渉することなく表示します。 Private Classtest1 As Class1 Private Classtest2 As Class1 Sub TestClass() Set Classtest1 = New Class1 Set Classtest2 = New Class1 Classtest1.xMsg = "test1 / あいうえお" Classtest2.xMsg = "test2 / かきけこ" Classtest1.xMsg = Classtest1.xMsg & " / さしすせそ" Classtest2.Test 'MsgBox Classtest2.xMsg 'こちらでも同じ Classtest1.Test 'MsgBox Classtest1.xMsg 'こちらでも同じ Set Classtest1 = Nothing Set Classtest2 = Nothing End Sub 'Class1 Private inMsg As String Public Property Get xMsg() As String xMsg = inMsg End Property Public Property Let xMsg(ByVal value As String) inMsg = value End Property Sub Test() 'ここに共通処理のコード MsgBox inMsg End Sub

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

訂正 Private Sub CommandButton1_Click() Call 共通処理(1) End Sub Private Sub CommandButton2_Click() Call 共通処理(2) End Sub Private Sub CommandButton3_Click() Call 共通処理(3) End Sub Private Sub CommandButton4_Click() Call 共通処理(4) End Sub Private Sub CommandButton5_Click() Call 共通処理(5) End Sub Private Sub 共通処理(n As Long) Select Case n Case 1 MsgBox "1のボタンを押したときの処理" Case 2 MsgBox "2のボタンを押したときの処理" Case 3 MsgBox "3のボタンを押したときの処理" Case 4 MsgBox "4のボタンを押したときの処理" Case 5 MsgBox "5のボタンを押したときの処理" End Select MsgBox "共通の処理" End Sub

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>シート上にボタンが5つあり、一部の処理は全て共通となっております。 クラスを使わなくても Private Sub CommandButton1_Click() Call 共通処理("1") End Sub Private Sub CommandButton2_Click() Call 共通処理("2") End Sub Private Sub CommandButton3_Click() Call 共通処理("3") End Sub Private Sub CommandButton4_Click() Call 共通処理("4") End Sub Private Sub CommandButton5_Click() Call 共通処理("5") End Sub Private Sub 共通処理(n As Long) Select Case n Case "1" MsgBox "1のボタンを押したときの処理" Case "2" MsgBox "2のボタンを押したときの処理" Case "3" MsgBox "3のボタンを押したときの処理" Case "4" MsgBox "4のボタンを押したときの処理" Case "5" MsgBox "5のボタンを押したときの処理" End Select MsgBox "共通の処理" End Sub

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

クラスを使う場合でしたら Class1に Sub Test() 'ここに共通処理のコード MsgBox "Class1Test" End Sub '標準モジュールなど Private Classtest As Class1 '↑は必ず先頭に Sub TestClass() Set Classtest = New Class1 Classtest.Test End Sub クラスを使わない共通処理のコードでしたら Sub TestFunction() FunctionTest End Sub Function FunctionTest() 'ここに共通処理のコード MsgBox "FunctionTest" End Function

noname#252888
noname#252888
回答No.1

色々手段は有りますが、 手っ取り早いのだとクラスモジュールじゃなくて、同じモジュール内に共通処理を作ればOKです。 Private Sub cmdButton1_Click() ・・・ Call CommonMod ・・・ End Sub Private Sub cmdButton2_Click() ・・・ Call CommonMod ・・・ End Sub Private Sub cmdButton3_Click() ・・・ Call CommonMod ・・・ End Sub Private Sub cmdButton4_Click() ・・・ Call CommonMod ・・・ End Sub Private Sub cmdButton5_Click() ・・・ Call CommonMod ・・・ End Sub Private Sub CommonMod() 共通部分を書く End Sub

関連するQ&A