- 締切済み
【VBA】ユーザーフォームでvbYesNo
VBA ユーザーフォームのコマンドボタンで「はい」「いいえ」を作成し、ダイアログボックスのvbYesNoと同等の事をしたいのですが、どうすればよろしいでしょうか? コマンドボタンを押すと「0」か「1」が返ってくるようにしたのですが、ユーザーフォームだけ表示され、回答を待たず次へ進んでしまいます。 ダイアログボックスのように選択の回答待ちのような状態にするにはどうすればよいかご教授おねがいします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
ACCESSの場合 フォーム:F_Msgbox ラベル:LBL_Msgbox ボタン:CMD_YES ボタン:CMD_NO Private Sub Form_Open(Cancel As Integer) LBL_Msgbox.Caption = Me.OpenArgs Me.Tag = "" End Sub Private Sub CMD_YES_Click() Me.Tag = 1 End Sub Private Sub CMD_NO_Click() Me.Tag = 0 End Sub 関数:FNC_Msgbox 引数:メッセージ:S 戻り値:0 or 1 Function FNC_Msgbox(S) As Integer DoCmd.OpenForm "F_Msgbox", , , , , , S Do Until Forms("F_Msgbox").Tag <> "" DoEvents Loop FNC_Msgbox = Forms("F_Msgbox").Tag DoCmd.Close acForm, "F_Msgbox" End Function
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
呼び出し側 Private Sub CommandButton1_Click() 'ユーザーフォームを表示する(フォームが閉じられるまで次に進まない) UserForm1.Show 'ユーザーフォームが「×」で閉じられたか、ボタンが押されたか判断 If IsNumeric(UserForm1.Tag) Then MsgBox UserForm1.Tag & "が押された" Else MsgBox "キャンセルされた" End If End Sub ユーザーフォーム側 Private Sub CommandButton1_Click() 'ユーザーフォーム上の「0」のボタンが押された処理 'Tagに0をセットして UserForm1.Tag = 0 'ユーザーフォームを閉じる UserForm1.Hide End Sub --------------------------------------------------------------- Private Sub CommandButton2_Click() 'ユーザーフォーム上の「1」のボタンが押された処理 'Tagに1をセットして UserForm1.Tag = 1 'ユーザーフォームを閉じる UserForm1.Hide End Sub この例では「ユーザーフォームを表示している呼び出し元」に「どのようにしてユーザーフォームが閉じられたのか」を伝えるため、ユーザーフォームの「Tagプロパティ」を用いています。
- neKo_quatre
- ベストアンサー率44% (735/1636)
> コマンドボタンを押すと「0」か「1」が返ってくるようにしたのですが、ユーザーフォームだけ表示され、 どういう風に表示していますか? VisibleプロパティをTrueにするだけだと、制御はそのまま流れてしまいます。 > 回答待ちのような状態にするには 例えば、ユーザーフォームに以下のような関数を設置して、そちらを呼び出して表示するようにするとか。 試してないですが。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' APIのSleep関数使用宣言 Dim btn ' ボタンの押下状態 -1:押されてない 0:いいえ 1:はい ' ユーザーフォームを可視化してボタンが押されるまで待機 Function DoVisivle() Me.Visible = True btn = -1 While btn = -1 Sleep 500 Wend Me.Visible = False DoVisible = btn End Function ' ボタン1が押された時のハンドラ Private Sub CommandButton1_Click() btn = 0 End Sub ' ボタン2が押された時のハンドラ Private Sub CommandButton2_Click() btn = 1 End Sub