VBAでvbMsgBoxHelpButtonを使ったメッセージボックスの使い方

このQ&Aのポイント
  • VBAのエクセルでvbMsgBoxHelpButtonを使ってメッセージボックスを表示する方法について教えてください。メッセージボックスにはOKボタンとヘルプボタンがあり、ヘルプボタンがクリックされた場合にのみ特定のメッセージを表示したいです。
  • If MsgBox関数を使用し、メッセージボックスにvbMsgBoxHelpButtonを指定すると、OKボタンとヘルプボタンが表示されます。ユーザーがOKボタンをクリックした場合は何も起こらず、ヘルプボタンをクリックした場合にのみ特定のメッセージを表示します。
  • しかし、実際に試してみたところ、ヘルプボタンをクリックしても何も起こらず、特定のメッセージが表示されません。正しい記述方法や設定方法を教えていただけないでしょうか?
回答を見る
  • ベストアンサー

vbMsgBoxHelpButtonの使い方

教えてください。 エクセルのVBAでHelp ボタンを使ってメッセージを出したいのですが・ 使い方がわかりません。 やりたいこととしては、最初のメッセージでOKボタンをクリックしたら何もしないで、ヘルプボタンをクリックした時だけ、作成者側の意向を伝えるメッセージを出したいのです。 If MsgBox("メッセージ", vbMsgBoxHelpButton) = vbOK Then 'OKボタンをクリックしたら何もしない。 Exit Sub Else MsgBox "ヘルプボタンをクリックした時のメッセージボックス", vbOKOnly といった具合に記述してみたのですが・・・。 ヘルプを押しても、何も起こりません・・・。 お知恵をください・・・。

noname#22811
noname#22811

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ヘルプボタンを特殊な用途に使うのは無理っぽいですよ MsgBoxの4番目5番目の引数に ヘルプファイル名とヘルプのトピック番号を与えて 状況依存のヘルプを表示させるのが目的です ご質問のコードの最初のMsgBoxが表示された状態で『ヘルプ』を押下しても MsgBoxは消えませんよね これが消えないと 次の命令を受け付けません MsgBox関数の内部で ヘルプボタンの処理をしているからです 独自の処理をするなら ユーザーフォームを作成してこちらを使うようにしましょう

noname#22811
質問者

お礼

ご回答ありがとうございます★ ユーザーフォームで作成しました。

関連するQ&A

  • 効率の良いテキストボックスの検知について

    VB6の初心者です。質問させていただきます。 画面上に5つのテキストボックス(TEXT1、TEXT2、TEXT3、TEXT4、TEXT5)と 1つのコマンドボタン(Cmd_SAVE)があり、 画面上の5つのテキストボックスをすべて記入し、 コマンドボタンを押すと、登録確認のメッセージボックスが表示され、 OKボタンを押すと、サーバへ転送され、 画面上のテキストボックスにひとつでも空欄があると、どのテキストボックスが 空欄であるかを示すメッセージが表示される処理をさせています。 そこで質問なのですが、今、メッセージボックス、登録処理は出来るようになったのですが、 とても処理の効率が悪い、もっと空欄を確認するのにすっきりとしたコードはある、と知り合いに言われました。 おそらく、繰り返し等を用いると思うのですが、メッセージにそれぞれのオブジェクト名を代入するやり方がわかりません。 下記が今のコーディングです。 Private Sub Cmd_SAVE_Click()   If TEXT1.Text = "" Then      MsgBox "TEXT1が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT2.Text = "" Then      MsgBox "TEXT2が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT3.Text = "" Then      MsgBox "TEXT3が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT4.Text = "" Then      MsgBox "TEXT4が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT5.Text = "" Then       MsgBox "TEXT5が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If MsgBox("入力データを登録しますか?", vbOKCancel, "登録確認") = vbCancel Then     Exit Sub   End If   End If ~登録処理~ End Sub どのような書き方がきれいで、効率的なコーディングなのでしょうか? ご教示お願いします!

  • VBAでエラー時の処理について

    入力画面には3つのTextBoxあり、すべてを入力したら「記入」ボタンをクリックします。 その時、TextBox2とTextBox3の合計がTextBox1の値と一致するか判定します。 一致した場合は、その値を選択したセルに表示し、一致しなかった場合は、メッセージを表示させ、メッセージの「OK」ボタンをクリックすると「記入」ボタンがクリックされる前の状態(UserForm1の入力項目にデータが入力されている状態)に戻したいのですが、どのようにしたらよいのでしょうか。 現在は、下記のようなかんじになっています。 Private Sub CommandButton1_Click()   Sum = 0  For N = 1 To 2  If Controls("TextBox" & N).Text = "" Then   RepMsg = MsgBox("値を入力して下さい。", vbOKOnly + vbExclamation, "入力確認")   『? 「記入」ボタンがクリックされる前の画面(UserForm1)に戻る』  Else   Sum = Val(Controls("TextBox" & N).Text) + Sum  End If  Next N  If Val(TextBox1.Text) <> Sum Then   RepMsg = MsgBox("合計が一致しません。", vbOKOnly + vbExclamation, "合計確認")   If RepMsg = vbOK Then    『? 「記入」ボタンがクリックされる前の画面(UserForm1)に戻る』   End If  End If ( 表示 ) End Sub

  • 初心者です。エクセルVBAの質問なのですが・・・

    エクセルのVBAで 例えば・・・IF関数を使いたい時に Public Sub 練習() 年齢 = InputBox("あなたは何歳ですか。数字だけを入力して下さい。") If 年齢 < 20 Then MsgBox "未成年ですね" ElseIf 年齢 < 30 Then MsgBox "20代ですね。" Else MsgBox "その他の年代ですね" End If End Sub                            のようなものを作って、実行をしたときに、数字を入れてOKボタンではなく、ダイアログボックスのキャンセルや閉じるボタンを押したときに、「その他の年代ですね」が出てきますが、それを出てこないようにすることはできますか?(例えば、キャンセルボタンのような役割をさせるなど・・・)  結構難しいですかね? 教えて下さい。お願いします。

  • 簡単な事だと思うのですが vba での質問です。

    Private Sub 処理名()  Dim a as Byte vbOK = MsgBox ("OK? or Cancel?",vbOKCancel,"確認")  If vbOK = 1 Then   MsgBox "OKが押されました"  else if   MsgBox "キャンセルが押されました"  End if  ~以下長々と処理~     長々と処理の最後~ End Sub 例えば上記のような、vbaマクロがあったとします。 もし、キャンセルを押した場合、有無を言わさず全ての処理を終了したい場合どのように記述をすれば宜しいのでしょうか? キャンセルを押した場合後続の長々と処理部分は全てキャンセルしたいのです。 私はその方法が分からないために分岐がある度にif分のネストが深くなってしまって困っています。 どなたかご教授下さい。 よろしくお願い致します。

  • アクセスの印刷VBAを教えて下さい

    アクセス初心者です。 バージョンは2002を使っています。 ネットで探して詳しく分からないままプログラムしています。 フォームで印刷のコマンドボタンを作ってそのボタンをクリックすると表示されてる 1ページのみ印刷したいのですが全てのレコードが印刷されてしまいます。 どうすればいいのか教えて下さい。 下記が今現在のVBAです。 Private Sub 印刷_Click() Dim varCopies As Variant varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定") If Len(varCopies) = 0 Then Exit Sub End If If IsNumeric(varCopies) = False Then MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub ElseIf CLng(varCopies) = 0 Then MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub End If If MsgBox("印刷しますか?" & vbCrLf & "部数=" & varCopies _ , vbYesNo + vbInformation, "印刷の確認") = vbYes Then DoCmd.OpenForm "伝票", acPreview, , , acFormReadOnly DoCmd.PrintOut acPrintAll, , , , CLng(varCopies) DoCmd.Close acForm, "伝票" End If End Sub

  • VBAどこがおかしいのかわかりません。

    画像の左下の新規から発注をかけ、それを選択して開く。とやると開くように作り、選択してないで開くを押すとエラーメッセージが出てくるようになっているのですが、選択して開くとやっても選択してくださいというエラーメッセージが出てきてしまいます。 Private Sub btn_open_Click() '## 「開く」ボタンクリック時 '値チェックと更新 If Not isSearch Then Exit Sub '選択項目がなければ終了 If Me.lbx_table.ListIndex = -1 Then MsgBox "対象のデータを選択してください", vbOKOnly + vbExclamation, "注意" 'メッセージボックスを出力 Exit Sub '終了 End If '発注依頼情報編集フォームを開く F_Odr_Editor.Show End Sub こんな感じでコードを書いたのですが どこが間違っているのでしょうか? よろしくお願いします。

  • 【VB.NET】別Formのボタンが押されるまで待機する方法??

    【VB.NET】別Formのボタンが押されるまで待機する方法??  今晩は,いつもいつも勉強させていただいております. 質問させていたきます.どうぞよろしくお願いいたします.  開発環境XP+VB2008になります。  今までは、コード中のMsgBoxで続行か中断かを選択するために  Private Sub Button1_Click        :        :        :    If MsgBox("続行しますか?", MsgBoxStyle.OkCancel, "確認") = vbOK Then    Else      Exit Sub    End If        :        :        :  End Sub     としておりましたが、このMsgBox上に複数のコントロールが必要になって しまいましたので、同じ形のFormを作成いたしました。 (Form_MsgBox上に、ButtonOK、ButtonCancel、Label1に加え                      TextBox1を配置)  Form_MsgBox.LabelMsg.Text = "確認"  Form_MsgBox.Show() が、このメッセージ表示中だけPrivate Sub Button1_Clickを 止めておく方法がわかりません。。。 ButtonOKかButtonCancelが押されるまで待機したいのですが。。  検索いたしておりますと、何か他のアプリを起動した場合に それが終わるまで待機する、といった方法は結構見つかるのですが。。。  何か良さそうな方法など思いつかれるようでございましたら、 是非ともアドバイスいただきたくお願い申し上げます。  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • VBAのinputboxで何もいれずに[OK]を押した時エラーになります

    よろしくお願い致します。 EXCELのVBAで「inputbox」を使ってセルを選択させたいと考えております。 下記のコードだと「キャンセル」や「×」で閉じられた時はmsgbox「キャンセル」が出てExit subするのですが、何も入力しないで「OK」を押した場合がどうしてもエラー(入力した数式は正しくありません)になります。 いろいろ調べて試したのですがどうしてもできず困っています。 どなたか教えてください。 Sub test() Dim myAns As Range On Error Resume Next Set myAns = Application.InputBox(Prompt:="セルを選択してください。", Title:="セル選択", Type:=8) On Error GoTo 0 If myAns Is Nothing Then MsgBox "キャンセル" Exit Sub ElseIf myAns = "" Then MsgBox "最低1つは選択してください" Exit Sub Else MsgBox myAns.Address(0, 0) End If End sub

  • VBAのキャンセル処理

    下記のVBAでファイルを出力することはできるようになったのですが、 出力するときに[キャンセル]を押しても"MsgBox :Excelファイルへの出力が完了しました。"が表示されてしまいます。 「キャンセル」した場合は、このメッセージが表示されないようにできないでしょうか? Private Sub Image_Export_Click() On Error GoTo Err_FileDialog_Click 'ファイル出力 Dim strFileName As String Dim ExpFileName As String ExpFileName = "T_master_" & Format(Now(), "yyyymmdd") strFileName = GetFileName(False, "MicrosoftExcel ブック (*.xls)|*.xls", "", ExpFileName & ".xls") If Len(strFileName) = 0 Then 'キャンセルボタンが押されたときの処理を記述 MsgBox "キャンセルが押されました。" Else DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "T_master", strFileName & ".xls", True End If MsgBox "Excelファイルへの出力が完了しました。", , "出力完了" Exit_FileDialog_Click: Exit Sub Err_FileDialog_Click: MsgBox "予期せぬエラーが発生しました" & Chr(13) & _ "エラーナンバー:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbOKOnly End Resume Exit_FileDialog_Click End Sub

  • マクロ 記述が悪くエラーがかかります。

    いつも回答ありがとうございます。 最後らへんの記述で実行時エラー【型が一致しません】がかかります。 Worksheets("集計用").Range(b1, b2).Copy _ Destination:=Worksheets(b3).Range("B2") ← ここでエラーがかかる。 ワークシート名に変数を使用しているせいだと思います。 解決する方法を御指導して頂けないでしょうか?宜しくお願い致します。 Sub グラフの作成() Dim Date1 As Date Dim Date2 As Date Dim SName As String Dim b1 As Variant Dim b2 As Variant Dim b3 As Variant Dim d1 As Variant Dim d2 As Variant Dim d3 As Variant With Worksheets("集計用") s1: Date1 = Application.InputBox("最初の日付を2012/12/1のように入力してください。") If Date1 = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b1 = .Columns("B").Find(Date1, , xlValues, 1) If b1 Is Nothing Then If MsgBox("入力した日付が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s1 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d1 = b1.Row s2: Date2 = Application.InputBox("最初の日付を2012/12/31のように入力してください。") If Date1 = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b2 = .Columns("B").Find(Date2, , xlValues, 1) If b2 Is Nothing Then If MsgBox("入力した日付が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s2 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d2 = b2.Row s3: SName = Application.InputBox("商品名を入力して下さい。") If SName = "False" Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b3 = .Rows("3").Find(SName, , xlValues, 1) If b3 Is Nothing Then If MsgBox("入力した商品名が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s3 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d3 = b3.Column End With Worksheets.Add After:=Worksheets("集計用") ActiveSheet.Name = b3 Worksheets("集計用").Range(b1, b2).Copy _ Destination:=Worksheets(b3).Range("B2") Worksheets("集計用").Range(Cells(d1, d3), Cells(d2, d3)).Copy _ Destination:=Worksheets(b3).Range("C2") End Sub

専門家に質問してみよう