| 
    
     |  | 皆さん、こんばんは。 
 ユーザーフォームでMsgboxを行う簡単なサンプルです。
 といっても簡単な「OK」ボタンのみの場合ですが・・・。
 前準備として
 コントロールを一つも配置しないユーザーフォーム(Userform1)を
 作成しておいて下さい。
 
 標準モジュールに
 '=====================================================
 Sub test()
 mymsgbox "MSGBOXも汎用的に作るのは、そんなに楽" & _
 "ではないですねえ!!。 これはサンプルなので「OK」ボタンのみの" & _
 "場合ですが、ボタンの数をIDによって分ける場合は更に複雑になりそうです。"
 mymsgbox "MSGBOXも汎用的に作るのは、そんなに楽" & vbLf & _
 "ではないですねえ!!。 これはサンプルなので「OK」ボタンのみの" & vbLf & _
 "場合ですが、ボタンの数をIDによって分ける場合は更に複雑になりそうです。", 100, 100
 End Sub
 '========================================================================
 Function mymsgbox(mes As String, Optional myleft = 0, Optional mytop = 0) As Long
 'input :mes ---表示文字列 myleft 水平位置 mytop 垂直位置
 'output :mymsgbox 押されたボタン(今のところ、0(OKボタンが押された)を返す
 Dim lbl As MSForms.Label
 Dim btn As MSForms.CommandButton
 Load UserForm1
 With UserForm1
 .StartUpPosition = 0
 .top = mytop
 .left = myleft
 Set lbl = .Controls.Add("Forms.Label.1")
 With lbl
 .top = 10
 .left = 10
 .Caption = mes
 .Width = Len(mes) * 11
 .AutoSize = True
 End With
 Set btn = .Controls.Add("Forms.CommandButton.1")
 With btn
 .Caption = "OK"
 .top = lbl.top + lbl.Height + 10
 .AutoSize = True
 End With
 .Width = lbl.left + lbl.Width + 10
 .Height = btn.top + btn.Height + 30
 btn.left = .Width / 2 - btn.Width / 2
 Set .btn = btn
 .Show
 mymsgbox = .btn_id
 Unload UserForm1
 End With
 End Function
 
 
 準備したuserform1のモジュールには、
 
 '==================================================
 Public btn_id As Long
 Public WithEvents btn As MSForms.CommandButton
 '==================================================
 Private Sub btn_Click()
 btn_id = 0
 Me.Hide
 End Sub
 
 
 以上です。testを実行してみて下さい。
 「はい」ボタンや「いいえ」ボタン等のMsgboxのバリエーションとなると
 もうちょっと追加しなくてはなりませんが・・・。
 
 確認してみて下さい
 
 |  |