|
皆さん、こんばんは。
ユーザーフォームで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のバリエーションとなると
もうちょっと追加しなくてはなりませんが・・・。
確認してみて下さい
|
|