Excel VBA質問箱 IV

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

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


60302 / 76732 ←次へ | 前へ→

【21070】Re:msgbox を任意の位置に表示する
発言  ichinose  - 05/1/9(日) 19:25 -

引用なし
パスワード
   こんばんは。
>mymsgboxで 戻り値を 例えば1にするには
>どうしたらいいでしょうか?

>準備したuserform1のモジュールには、
>
>'==================================================
>Public btn_id As Long
>Public WithEvents btn As MSForms.CommandButton
>'==================================================
>Private Sub btn_Click()
  btn_id = 0 '←ここを1にします
>  Me.Hide
>End Sub
一日、温泉に浸かって、頭がボーッとしているので
間違いがあるかもしれませんが(いい訳)、
「OK」、「Cancel」ボタンも追加しました。

>前準備として
>コントロールを一つも配置しないユーザーフォーム(Userform1)を
>作成しておいて下さい。
これは、前回と同じです。

標準モジュールに
'==========================================================
Sub test()
   Dim ans As Long
   ans = mymsgbox("Mymsgboxのテストです。「OK」ボタン又は、" & _
    "「Cancel」ボタンを押して下さい。", 1)
   mymsgbox IIf(ans = 0, "OK", "Cancel") & " が押されました", , 200, 200
   ans = mymsgbox("Mymsgboxのテストです。" & vbLf & _
       "「OK」ボタン又は、" & vbLf & _
       "「Cancel」ボタンを押して下さい。", 1, 100, 100)
   mymsgbox IIf(ans = 0, "OK", "Cancel") & " が押されました", , 200, 200
End Sub
'=======================================================================
Function mymsgbox(mes As String, Optional ByVal boxtype = 0, Optional ByVal myleft = 0, Optional ByVal mytop = 0) As Long
'input :mes ---表示文字列
'    boxtype-- 0--「OK」ボタンのみ 1--「OK」「CANCEL」
'    myleft 水平位置 mytop 垂直位置
'output :mymsgbox 押されたボタンを返す
'    ok--0 cancel--1
'
  Dim lbl As MSForms.Label
  Dim btn1 As MSForms.CommandButton
  Dim btn2 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 btn1 = .Controls.Add("Forms.CommandButton.1")
   With btn1
    .Caption = "OK"
    .top = lbl.top + lbl.Height + 10
    .AutoSize = True
    End With
   Select Case boxtype
    Case 0
     .Width = lbl.left + lbl.Width + 10
     .Height = btn1.top + btn1.Height + 30
     btn1.left = .Width / 2 - btn1.Width / 2
     Set .btn1 = btn1
    Case 1
     Set btn2 = .Controls.Add("Forms.CommandButton.1")
     With btn2
      .Caption = "Cancel"
      .top = lbl.top + lbl.Height + 10
      .AutoSize = True
      End With
     btn1.Width = Application.Max(btn1.Width, btn2.Width)
     btn2.Width = btn1.Width
     .Width = Application.Max(lbl.left + lbl.Width + 10, btn1.Width + 4 + btn2.Width + 30)
     .Height = btn1.top + btn1.Height + 30
     btn1.left = .Width / 2 - btn1.Width - 2
     btn2.left = .Width / 2 + 2
     Set .btn1 = btn1
     Set .btn2 = btn2
    End Select
   .Show
   mymsgbox = .btn_id
   Unload UserForm1
   End With
End Function


>準備したuserform1のモジュールには、

'==============================================================
Public btn_id As Long
Public WithEvents btn1 As MSForms.CommandButton
Public WithEvents btn2 As MSForms.CommandButton

'===============================
Private Sub btn1_Click()
  btn_id = 0
  Me.Hide
End Sub
'===============================
Private Sub btn2_Click()
  btn_id = 1
  Me.Hide
End Sub
'===============================
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If CloseMode = 0 Then '閉じるボタンを無効にする
    Cancel = True
    End If
End Sub


これでtestを実行して下さい。
ボタンの数が多くなるようならクラスモジュールを使用する
案も考えられますが、増えても3つまでなら上記のような方法でもよいかな?
と思います。
0 hits

【21035】msgbox を任意の位置に表示する QP 05/1/8(土) 14:20 質問
【21036】Re:msgbox を任意の位置に表示する 鳴島亮 05/1/8(土) 14:33 発言
【21037】Re:msgbox を任意の位置に表示する QP 05/1/8(土) 14:43 質問
【21038】Re:msgbox を任意の位置に表示する QP 05/1/8(土) 14:58 発言
【21041】Re:msgbox を任意の位置に表示する IROC 05/1/8(土) 16:23 回答
【21042】Re:msgbox を任意の位置に表示する KIRI 05/1/8(土) 16:56 回答
【21053】Re:msgbox を任意の位置に表示する ichinose 05/1/8(土) 19:10 発言
【21057】Re:msgbox を任意の位置に表示する QP 05/1/9(日) 10:57 お礼
【21070】Re:msgbox を任意の位置に表示する ichinose 05/1/9(日) 19:25 発言
【21072】Re:msgbox を任意の位置に表示する QP 05/1/10(月) 8:11 お礼

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