Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


23972 / 76732 ←次へ | 前へ→

【58115】Re:プロシージャの呼び出し方について
発言  そう  - 08/10/3(金) 9:29 -

引用なし
パスワード
   ▼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 でプロシージャを呼び出すこと自体(呼び出したいプロシージャがフォームモジュールではなく標準モジュールに置かれていても)避けるべきで、極力呼び出したいプロシージャはフォームモジュール内に置いてイベントプロシージャで処理をした方が安全(?)なのならば、今後もこの教えていただいた書き方を活かして行きたいと思っているのですが・・・・・・。
いかがなものなのでしょうか?

ご指導よろしくお願いいたします。

1 hits

【58113】プロシージャの呼び出し方について そう 08/10/3(金) 1:28 質問
【58114】Re:プロシージャの呼び出し方について ichinose 08/10/3(金) 6:55 発言
【58115】Re:プロシージャの呼び出し方について そう 08/10/3(金) 9:29 発言
【58121】Re:プロシージャの呼び出し方について ichinose 08/10/4(土) 8:21 発言
【58122】Re:プロシージャの呼び出し方について そう 08/10/4(土) 9:59 お礼

23972 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free