| 
    
     |  | ▼ichinose さん: 
 >提示されたコードのように、Onactionプロパティには、
 >標準モジュールのプロシジャーを指定して、
 >
 >このプロシジャーの中からユーザーフォームのプロシジャーを呼び出す方法も
 >考えられます。
 >
 >標準モジュール
 >
 >sub FirstStringConv()
 >  userform1.フォームのプロシジャー名
 >end sub
 >
 >(尚、この時、ユーザーフォームの呼び出すプロシジャーは
 >Public宣言されている必要があります)
 >
 >例
 >public sub フォームのプロシジャー名()
 >
 >
 >が、
 >コードや仕様にもよりますが、
 >各モジュール間の結合度が強くなってしまうことが懸念されます。
 >
 >
 >ユーザーフォームのモジュールを
 >
 >Option Explicit
 >Dim myCB As CommandBar
 >Private WithEvents btn_FirstStringConv As Office.CommandBarButton
 >Private WithEvents btn_SecondStringConv As Office.CommandBarButton
 >
 >Private Sub btn_FirstStringConv_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
 >  MsgBox "FirstStringConvの中のコードを実行"
 >'ここに第1次変換モードというボタンがクリックされたときの
 >'コードを記述します。
 >
 >End Sub
 >
 >Private Sub btn_SecondStringConv_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
 >  MsgBox "SecondStringConvの中のコードを実行"
 >'ここに第2次変換モードというボタンがクリックされたときの
 >'コードを記述します。
 >
 >End Sub
 >
 >Private Sub UserForm_Initialize()
 >  On Error Resume Next
 >  CommandBars("tbMenu").Delete
 >  On Error GoTo 0
 >  Set myCB = CommandBars.Add(Name:="tbMenu", _
 >       Position:=msoBarPopup, Temporary:=True)
 >  With myCB
 >    Set btn_FirstStringConv = .Controls.Add(Type:=msoControlButton)
 >    With btn_FirstStringConv
 >      .Caption = "第1次変換モード"
 >    End With
 >
 >    Set btn_SecondStringConv = .Controls.Add(Type:=msoControlButton)
 >    With btn_SecondStringConv
 >      .Caption = "第2次変換モード"
 >      .BeginGroup = True
 >    End With
 >  End With
 >
 >End Sub
 >
 >
 >Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 >
 >  If Button = 2 Then
 >    myCB.ShowPopup
 >  End If
 >
 >
 >End Sub
 >
 >
 >Private Sub UserForm_Terminate()
 >
 >  On Error Resume Next
 >  myCB.Delete
 >  On Error GoTo 0
 >
 >End Sub
 >
 >
 >このようにOnactionではなく、イベントプロシジャーで処理することを
 >考えると他のモジュールとの関わり合いが少なくなり、結合度が弱くなりそうです。
 >
 >検討してみてください。
 
 
 ありがとうございます。
 教えていただいたコードで問題は無事解決いたしました。
 
 ところで、教えていただいた解説の中で OnAction を使用すると各モジュール間の結合度が強くなってしまうことが懸念されるとあるのですが、これはいったいどんな不具合に関わってくるのでしょか?
 と言うのも、もしなるべく OnAction でプロシージャを呼び出すこと自体(呼び出したいプロシージャがフォームモジュールではなく標準モジュールに置かれていても)避けるべきで、極力呼び出したいプロシージャはフォームモジュール内に置いてイベントプロシージャで処理をした方が安全(?)なのならば、今後もこの教えていただいた書き方を活かして行きたいと思っているのですが・・・・・・。
 いかがなものなのでしょうか?
 
 ご指導よろしくお願いいたします。
 
 |  |