VBAの確認メッセージを非表示にして保存する方法

このQ&Aのポイント
  • VBA初心者の方が、WEBクエリを更新してブックを保存する際、確認メッセージを非表示にする方法について質問されています。
  • 質問者は、コマンドボタンをクリックした際にWEBクエリを更新し、メッセージなしでブックを上書き保存したいと考えているようです。
  • しかし、現在のコードではうまく動作せず、特にCommandButton1のWSH.Popupが原因のようです。回避方法を教えてほしいという質問です。
回答を見る
  • ベストアンサー

VBA 確認メッセージを非表示で保存

VBA初心者です。 素人質問ですが、どうぞよろしくお願いいたします。 BOOK1のSheet1にwebクエリが設定されています。 Sheet1にはコマンドボタンが二つあり、 CommandButtun1にはクエリを更新するマクロ。 CommandButtun2にはクエリを更新してブックを閉じるマクロがあります。 コマンドボタン2をクリックすると、Webクエリを更新して、 ブックをメッセージなしで上書き保存したいのですが、 下記のマクロではうまく動作しません。 クエリ更新のあとの、ブック保存、クローズするマクロが動作しない状況です。 CommandButtun1のWSH.Popupが原因のようですが、 何か回避方法がありましたら、ご教授いただけませんか? CommandButtun1には下記のマクロ Private Sub CommandButton1_Click() '独自のエラーメッセージを表示する(On Errorステートメント) On Error GoTo Err_Msg 'webクエリ更新 Range("H6").Select Selection.QueryTable.Refresh BackgroundQuery:=False 中略 Exit Sub 'エラーメッセージの指定 Err_Msg: Dim WSH As Object Set WSH = CreateObject("Wscript.Shell") WSH.Popup "完了しました。", 3, "自動的に閉じます", vbYesNo + vbInformation Set WSH = Nothing End End Sub ------------------------------------------------------------------------- CommandButtun2には下記のマクロ Private Sub CommandButton2_Click() CommandButton1.Value = True If ThisWorkbook.Saved = False Then ThisWorkbook.Save End If ActiveWorkbook.Close End Sub

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

現象は 1.コマンドボタン2をクリックする 2.コマンドボタン1のWEBクエリ更新が実行される 3.エラーが発生して「自動的に閉じます」が表示される 4.コマンドボタン2に復帰して保存するつもりがされない という事ですか? だとしたらエラーメッセージの指定部分に書いているEnd命令で終了しているのが原因なので, 対策1:End命令を削る 対策2:エラーメッセージの指定ブロックに行かない(エラーを出さない)ようにコマンドボタン1のプログラムを改修する? 対策3:何かの理由でEnd命令が削れないなら,コマンドボタン2内にWEBクエリの更新を書いて(endさせず)引き続き保存を行う などかなと思います。

tokyo2199
質問者

お礼

ありがとうございます。 現象ですが、 "1.コマンドボタン2をクリックする 2.コマンドボタン1のWEBクエリ更新が実行される 3.エラーが発生して「自動的に閉じます」が表示される 4.コマンドボタン2に復帰して保存するつもりがされない" 3.の部分のエラーはありません。 クエリ更新のあと”完了しました”のポップアップ表示後、 EXCELに戻り、次のプログラムには移行しません。 End はクエリ更新処理を繰り返し行っているため、 削除はできない状態です。 プログラムの改修を試みたいと思います。

その他の回答 (1)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

エクセル使ったことないけど(詳しくないけど)まず、 On error goto Err_Msg をコメント化して(先頭に’をつけて)、実行しどの行で問題が発生しているのかを調べ、なんでそこでエラーが起きるのかを質問したほうが良いと思う。 エラーが起きた後のフローだけを書いてもらっても、わからない。 (問題は中略部分にあるんじゃないかな)

関連するQ&A

  • シートが表示された時にメッセージを表示したい

    win7・Excel2007でマクロ作成中の初心者です。 1)今ブック2個があります。 2)ひとつは、ブックAでマクロ書き込み用です。 3)もひとつは、ブックBで、データ作業用です。 4)やりたい事は、ブックAのユーザーフォームのコマンドボタンクリックで  ブックBのシートCを表示させ、メッセージボックスを即座に表示させたいです。 5)そこで、ブックAにコードを書込みました。 Private Sub CommandButton89_Click() Unload Me 表を開く End Sub ----------------------------------------- Sub 表を開く() ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path On Error GoTo err: Workbooks("H25年11月の表.xls").Activate Exit Sub err: Workbooks.Open Filename:=ThisWorkbook.Path & "\綴り\H25年11月の表.xls" Sheets("確定").Select MsgBox "これを更新してください。" End Sub ところが、シートCを表示させてから、メッセージボックスを表示させたいのに Private Sub CommandButton89_Click() Unload Me こんなところで(この段階で)、メッセージボックスが出てきてしまいます。 表を開く ここで出したいです。 End Sub シートを開いてからメッセジボックスを開くにはどうしたらよいでしょうか?よろしくお願いします。

  • VBA 複数のBOOKの連続操作

    いつもお世話になっております。 複数のブックの更新操作についてわからないことがあります。 複数のブックには項目別のWEBクエリが設定されており、 更新の際にはその都度ブックを開いた上更新しています。 BOOKは4つあり、 BOOK1のコマンドボタンからBOOK2~BOOK4までの更新を実行したいと思っています。 下記のように作ってみたのですが、 BOOK2を更新して閉じた後、BOOK3への処理はスルーされています。 エラーが出るわけではないのですが・・・ 素人のため、説明も要所を得ていませんが、 どうかお力を貸していただけないでしょうか? 下記 BOOK1のマクロ Private Sub CommandButton9_Click() 'ブック2を開いてWEBクエリ更新 Workbooks.Open Filename:="D:\TestBook\test.xlsm" WBN = ActiveWorkbook.Name Application.Run "'" & WBN & "'!Module3.更新して閉じる" 'ブック3を開いてWEBクエリ更新 Workbooks.Open Filename:="D:\TestBook\test2.xlsm" WBN = ActiveWorkbook.Name Application.Run "'" & WBN & "'!Module3.更新して閉じる" End Sub BOOK2~BOOK4 Module3 Sub a1() ' エラーメッセージを表示する(On Errorステートメント) On Error GoTo Err '-------------------------------------------------------- 'webクエリ更新 Range("B6").Select Selection.QueryTable.Refresh BackgroundQuery:=False ’中略 'エラーならブックを上書き保存して閉じます Err: Sheets("sheet1").Select Range("C2").Select Selection.ClearContents Range("P3").Select If ThisWorkbook.Saved = False Then ThisWorkbook.Save End If ActiveWorkbook.Close End Sub 宜しくお願いいたします。

  • 他ブックのセルの値をリンクさせたい

    Excel2007でマクロ作成中の初心者です。 常に同一フォルダの中のブックA(マクロ記入用)とブックB(データ計算用)を開いて、作業しています。 ちなみにこのフォルダはデスクトップ上にあります。 まず、ブックAを開き、出てきたフォームの中のコマンドボタンを押して、 ブックBを開き、セル("D2")に、ブックAのセル("A1")の値がリンクされているようにしたいです。 どのようにしたらリンクできるでしょうか。 Private Sub CommandButton89_Click() ブックBを開く Sheets("管理").Select  Range("D2").select End Sub ------------------------------------- Sub ブックBを開く() ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path On Error GoTo err: Workbooks("25年計算.xlsm").Activate Exit Sub err: Workbooks.Open Filename:=ThisWorkbook.Path & "\25年\25年計算.xlsm" End Sub

  • 隠していたユーザーフォームを再び表示したい

    ExcelVBA をExcel2007で苦戦している初心者です。 マクロ記載のAブックとBブックを使っています。 Aブックのユーザーフォーム「表紙」にあるボタンをクリックして Private Sub CommandButton11_Click() 表紙.Hide Workbooks.Open Filename:=ThisWorkbook.Path & "\改善案.xlsm" Sheets(1).Select End Sub Bブック(改善案)に飛び、作業後これを閉じ、Aブックに戻したいです。 Aブックは、まだ閉じてはいません。 同時に、ユーザーフォーム「表紙」を再表示したいです。 Private Sub CommandButton2_Click() Unload UserForm1 Application.DisplayAlerts = False ThisWorkbook.Close Application.DisplayAlerts = True 表紙.show End Sub すると次のエラーが表示され 「コンパイルエラー 変数が定義されていません」 表紙.showの表紙が反転表示されます。 Aブックに戻ったときにユーザーフォーム「表紙」を表示するには どうしたらよろしいでしょうか。よろしくお願いします。

  • 同じマクロ名でも、違うモジュールならエラーにならな

    同じマクロ名でも、違うモジュールならエラーにならない? エクセルVBAについてご教授ください。 標準モジュールに ――――――――― Option Explicit Sub CommandButton1_Click() MsgBox "" End Sub Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― と同じマクロ名を2つ作ったら、コンパイルエラーになりますが、 上記のコードは一度消して、フォームモジュールに ――――――――― Private Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作り、 標準モジュールに ――――――――― Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作った場合は、エラーにならずにマクロを実行できました。 これは、フォームモジュールがPrivate Subだからでしょうか? フォームモジュールに1つ、 標準モジュールに1つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。

  • EXCELで保存済みにしたい

    EXCELのマクロである処理をするプログラムを作っています。 その中でVBAでListBoxに項目を動的に追加しています。 ListBoxに項目を追加すると終了時、 「ListBox.xlsへの変更を保存しますか?」の確認ダイアログが出ています。 このメッセージを出したくないのですがどうしたらよいですか? 以下がそのソースです。 '------------------------------------------------------ Option Explicit 'ListBox1に項目を追加 Private Sub CommandButton1_Click() ListBox1.AddItem ("りんご") ListBox1.AddItem ("みかん") ThisWorkbook.Saved = True End Sub '保存済みの確認 Private Sub CommandButton2_Click() MsgBox ThisWorkbook.Saved End Sub 'セルを変更しても保存済みにする Private Sub Worksheet_Change(ByVal Target As Range) ThisWorkbook.Saved = True End Sub '--------------------------------------------------------- セルの変更はWorksheet_Changeイベントで  ThisWorkbook.Saved = True で確認ダイアログが出ないようにしています。 よろしくお願いします。

  • ACCESS エラーメッセージ表示されない理由

    ACCESSのエラーメッセージ表示について教えてください。 ACCESS2000でマクロを作成しました。 あるデータを読み込み、テーブルへ反映させるマクロです。 マクロを直接実行すると、データが存在しないとき、当然、エラーメッセージが表示されます。 ところが、このマクロをフォームから実行させると、同じ状況でエラーメッセージが表示されません。 どこに問題があってメッセージが表示されないものなのでしょう。(正常系の処理は正しく行われます) フォームのボタンにマクロの実行を定義しただけなのですが。 VBAを開いてみても、下記のとおりクリックされたときエラーならメッセージを表示しなさいと定義されています。 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click   Dim stDocName As String   stDocName = "マクロ名"   DoCmd.RunMacro stDocName Exit_コマンド1_Click:   Exit Sub Err_コマンド1_Click:   MsgBox Err.Description   Resume Exit_コマンド1_Click End Sub

  • アクセスVBAのエラーについて

    フォームを閉じるためにフォームにボタンを置いて、イベントプロシージャに下記のように書き込みました。すると添付画像のエラーが返ってきてマクロが動きません。 Private Sub コマンド103_Click() On Error GoTo Err_コマンド103_Click DoCmd.Close Exit_コマンド103_Click: Exit Sub Err_コマンド103_Click: MsgBox Err.Description Resume Exit_コマンド103_Click End Sub で、「ファイル-オプション-現在のデータベース」の”フォームの表示”を問題のフォームに切り替えたら問題なく動作します。 つまり”フォームの表示”で選んだフォームでしかコマンドボタンのマクロが動きません。全てのフォームでマクロが動くにはどうしたらよいのでしょうか?

  • VBA コマンドボタン 頭に0がでない

    各ボタンに以下を入れる Private Sub CommandButton1_Click() Selection.Value = Selection.Value & "1" End Sub Private Sub CommandButton2_Click() Selection.Value = Selection.Value & "2" End Sub . . Private Sub CommandButton10_Click() Selection.Value = Selection.Value & "0" End Sub Private Sub CommandButton11_Click() Selection.Value = Selection.Value & "." End Sub 0.1と入力しても0.1が表示できなく、1となってしまいます。 また.1と入力しても0.1でなく、1になってしまいます。 どうすれば良いでしょうか?

  • 複数のコマンドボタン(VBAで)を一つにまとめたい。

    複数のコマンドボタン(VBAで)を一つにまとめたい。 Private Sub CommandButton1_Click() Application.Goto Reference:=Range("A7"), Scroll:=True End Sub Private Sub CommandButton2_Click() Application.Goto Reference:=Range("A29"), Scroll:=True End Sub Private Sub CommandButton3_Click() Application.Goto Reference:=Range("A51"), Scroll:=True End Sub Private Sub CommandButton4_Click() Application.Goto Reference:=Range("A73"), Scroll:=True End Sub Private Sub CommandButton5_Click() Application.Goto Reference:=Range("A95"), Scroll:=True End Sub Private Sub CommandButton6_Click() Application.Goto Reference:=Range("A117"), Scroll:=True End Sub Private Sub CommandButton7_Click() Application.Goto Reference:=Range("A139"), Scroll:=True End Sub Private Sub CommandButton8_Click() Application.Goto Reference:=Range("A161"), Scroll:=True End Sub Private Sub CommandButton9_Click() Application.Goto Reference:=Range("A183"), Scroll:=True End Sub Private Sub CommandButton10_Click() Application.Goto Reference:=Range("A205"), Scroll:=True End Sub Private Sub CommandButton11_Click() Application.Goto Reference:=Range("A227"), Scroll:=True End Sub 上記のように複数のコマンドボタンを関数化して一つにすることは出来るでしょうか?

専門家に質問してみよう