Excel VBA「Application.DisplayAlerts」について

このQ&Aのポイント
  • Excel VBAの「Application.DisplayAlerts」を使用すると、確認画面を出さずに処理をすることができます。
  • ただし、デフォルトのボタンが押された状態で処理が進められるため、任意のボタンを押した状態で処理を進めさせる方法を知りたいです。
  • Application.DisplayAlertsを使わない他の方法でもかまいません。ご教授いただけると幸いです。
回答を見る
  • ベストアンサー

EXCEL VBA「Application.DisplayAlerts」について

Application.DisplayAlerts = False XXXXXXXX Application.DisplayAlerts = True で、確認画面を出さずにXXXXXXXXの処理をすることができますが、 その確認画面に、いくつかの選択ボタンがある場合、 確認画面を出さずに、かつ、任意のボタンを押した状態で処理を進めさせるには、どのようにすればよいのでしょうか? そのまま Application.DisplayAlerts を使うと、確認画面は出ないものの デフォルトのボタン(フォーカスがあるボタン)が押された状態で、 処理が進められてしまうようです。 Application.DisplayAlerts を使わない別な方法でもかまいません。 ご存知の方、ご教授いただけると幸いです。 よろしくお願いします。

  • THUBAN
  • お礼率76% (771/1002)

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

開くときに確認ダイアログが出るのは「読み取り専用」ではなく「読み取り専用推奨」だと思いますがそれはさておき。 #「読み取り専用」なら選択出ません http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.workbooks.open(VS.80).aspx にあるとおりOpenメソッドでReadOnlyパラメータをFalseに設定してやればいいような。 ついでに、このダイアログを出さないだけならApplication.DisplayAlertsではなくWorkbooks.OpenでIgnoreReadOnlyRecommendedをTrueにすればよさそうです。

THUBAN
質問者

お礼

Workbooks.Open ○○○.xls, IgnoreReadOnlyRecommended:=True だけで、無事に通常モードで開くことができました。 あとは、ブック共有になっているので、これを解除できれば、処理を進めることができます。 どうもご回答ありがとうございました!

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Application.DisplayAlerts 使わない場合は、コードで任意の処理をする事になります。 1.処理の前にチェック 2.エラートラップを使って、任意のエラー対策を行う。 という方法になります。 1は、保存ファイル名の重複(同一ファイル名)の事前チェック等。 2は、on error goto 等でエラー番号をチェックして任意の処理。 具体的な処理内容が不明なので、一般的な回答になります。

THUBAN
質問者

補足

ご回答ありがとうございます。 ただ、回答の意味が良くわかりませんでした。 補足しますと・・・ XXXXXXXXの処理部分を含めると、現在、以下のようなコードになっています。 Application.DisplayAlerts = False Workbooks.Open ○○○.xls Application.DisplayAlerts = True ○○○.xlsに読み取り専用がかけられているため、 Application.DisplayAlerts を使わずに実行すると、 以下のメッセージダイアログが出ます。 --- '○○○.xls'を変更し、保存する必要がなければ、読み取り専用で開いてください。読み取り専用で開きますか? [はい(Y)] [いいえ(N)] [キャンセル] --- メッセージダイアログを出さないように、Application.DisplayAlerts を指定して動作させると、 [はい(Y)]ボタンにデフォルトフォーカスされているためか、読み取り専用で開いてしまいます。 これを、メッセージダイアログを出さずに、[いいえ(N)]ボタンを押したときと同じ状態で、 つまり、読み取り専用ではなく開きたいのです。

関連するQ&A

  • Excel VBAでのシートの削除について

    Excel VBAで、シート上に配置されたボタンをクリックすることで、メッセージを出さずにそのシートの削除をしたいと思っています。 サンプルとして、シート上(例えばSheet1)にボタンを1個配置し、 ------------------------------------------------------- Private Sub CommandButton1_Click() Application.DisplayAlerts = False Delete Application.DisplayAlerts = True End Sub ------------------------------------------------------- のようにすると、オートメーションエラーが起きます。 そこで、 Application.DisplayAlerts = True をコメントアウトしてやれば実行はできるのですが、その後別のシートで処理を行う場合には、再度メッセージを表示してほしいと思っています。 ためしに、Sheet1削除後にアクティブになるSheet2に次のようなコードを記述しました。Sheet1同様、シート上にボタンを1個配置しています。 ------------------------------------------------------- Private Sub CommandButton1_Click() MsgBox Application.DisplayAlerts End Sub Private Sub Worksheet_Activate() MsgBox "次に出るメッセージはアクティブ直後のDisplayAlerts設定。" MsgBox Application.DisplayAlerts Application.DisplayAlerts = True MsgBox "次に出るメッセージは変更後のDisplayAlerts設定。" MsgBox Application.DisplayAlerts End Sub ------------------------------------------------------- こうすれば、Sheet1削除後、アクティブになった直後はDisplayAlertsがFalse。その後設定変更してTrueになるかとおもったのですが、結果はFalseでした。しかしその後、ボタンをクリックするとTrueが返ってきました。 いろいろ調べましたが、なぜこのような結果になるのかわかりません。よろしくお願いいたします。

  • エクセルで質問です。

    エクセルで質問です。 現在マクロを使って簡単な計算表を作っているのですが、エクセルを終了する時にフォームコントロールボタンを使って終了というカタチにしています。(下記参照) Sub 終了処理() Application.DisplayFullScreen = False With ActiveWindow .DisplayHorizontalScrollBar = True .DisplayVerticalScrollBar = True .DisplayWorkbookTabs = True .DisplayGridlines = True .DisplayHeadings = True End With Toolbars(1).Visible = True Toolbars(2).Visible = True Toolbars(5).Visible = True Toolbars(7).Visible = True Toolbars(9).Visible = True Application.DisplayFormulaBar = True Application.DisplayStatusBar = True Application.DisplayAlerts = False Application.Quit End Sub ここまではうまく出来たのですが、終わるときに右上にある×ボタンを使って終わる事が出来ないようにしたい!っていうのが今回の質問です。 皆様のお力をお借りしたいと思いますので宜しくお願い致します。 ちなみに、エクセルを開いた時はフルスクリーンになるようにしています。 trueのところがfalseにしています。

  • (VBA)ブックを閉じるプログラム

    表題の通りで、マクロを使ってブックを閉じるプログラムが作りたいです。 具体的には、 "終了"というボタンを作って、このボタンを押したときのみ変更を保存せずに、ブックを閉じる。 右上のXマークを押して閉じようとした場合は、"終了ボタンで終了して下さい"とメッセージを 表示させて、必ず終了ボタンで閉じる。 のようなプログラムです。 ネットで調べ、みよう見まねでプログラムを組んでみましたが、完全にブックが消えません。 また×ボタンを押した場合にブックを閉じない様にするプログラムが分かりません。 <組んでみたプログラム> Sub test2() Application.DisplayAlerts = False Workbooks("Book1.xls").Close Application.DisplayAlerts = True End Sub ご教授お願い致します。

  • Excel VBAでオートメーションエラーがでる

    いつもお世話になっております。 Sheets("修正シート").Select Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True Sheets("箇所見る").Select Range("A1").Select 上記のところで実行エラー オートメーションエラーです。 とメッセージがでます。 何がいけないのでしょうか? よろしくお願い致します。

  • エクセルマクロで列を削除したい

    エクセル2013です。 マクロの途中で列を削除するようにしてあります。 A列~J列、N列~Q列、T列~U列、W列~Y列を一括削除なのですが A列~J列だけは、作業者が選択した1列だけを残して削除をしたいです。 マウスで選択させて、列を指定する所までは作成できましたが 列削除の部分(★の部分)が 思うように作成できず完成できません。 アドバイスをお願いいたします。 Sub 列削除() Dim マウス選択 Dim 選択列 Dim 選択月表示 Dim 質問 On Error GoTo myError 'INPUT-BOXでキャンセルを選択した時の回避 Set マウス選択 = Application.InputBox("回覧用に編集したい月の列を選択してください", Type:=8) If マウス選択.Columns.Count > 1 Then '選択したしたのが列で有り1列であるか確認 MsgBox "選択したのは列ではありません。又は2列以上を選択しています" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If If マウス選択.Rows.Count > 1 Then '選択したのが行又はセルの場合の処理 Else MsgBox "行又はセルを選択しています。1列を選択してください" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If Set マウス選択 = マウス選択.EntireColumn Debug.Print マウス選択.Address 選択列 = マウス選択.Column 'INPUT-BOXで選択した列を数字に置き換える 選択月表示 = Cells(2, 選択列).Value '選択した列の8行目のセルの値を格納 If 選択列 > 10 Then '選択したのが11列以上の場合の処理 MsgBox "11列目以降は選択できません" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If 質問 = MsgBox("選択した月は " & 選択月表示 & " です。いいですか?", vbYesNo) If 質問 = vbYes Then MsgBox "処理を行います" '不要列削除 ★ Union(Columns("A:J"),Columns("N:Q"), Columns("T:U"), Columns("W:Y")).Delete Else MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If Exit Sub 'エラーが出なかった時のmyErrorの回避用 myError: 'INPUT-BOXでキャンセルを押した時の処理 MsgBox "キャンセルが押されました。プログラム終了します。" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub End Sub

  • ExcelマクロのApplication.EnableEvents

    Sub AAA()   Application.EnableEvents = False   If a = 0 then     処理A   End If   Application.EnableEvents = True End Sub このようなコードを組んでいます。 処理Aは、他シートへの書込みを行っており、 他シートのWorksheet_Changeイベントが動いて欲しくないので、 上記の位置にApplication.EnableEventsのFalseとTrueを入れたのですが、 (FalseとTrueを入れた位置は「If文の前後」ではなく、「コードの最初と最後」です) 処理Aによって他シートのWorksheet_Changeイベントも動きました。 ここで、  Application.EnableEvents = False  処理A  Application.EnableEvents = True のように記述したら、処理Aによる他シートのWorksheet_Changeイベントは止められました。 動かしたくない処理がある場合は、 その処理を行っている部分をピンポイントでFalseとTrueで挟まないといけないのでしょうか。 (最初と最後に宣言するのではダメなのでしょうか) それとも今回のような動作をした要因は別にあるのでしょうか。

  • VBA2003: 選択された複数シートを削除したい

    複数のワークシートを選択した状態で、次のマクロを動かすと1つのシートしか削除されません。 選択した全てのワークシートを削除したいのですが、コードのどこが間違っているのでしょうか。 Sub TOOL1() Dim objWs As Worksheet Application.DisplayAlerts = False For Each objWs In ActiveWindow.SelectedSheets objWs.Delete Next Application.DisplayAlerts = True End Sub

  • エクセルで保存しますか?のメッセージを表示しない

    皆さんこんにちは 教えてください、読み取り専用でエクセルファイルを開いて閉じるボタンを使って閉じるときに「保存しますか?」のメッセージを出さないで閉じたいのですが、Workbook_BeforeClose イベントに Application.DisplayAlerts = False としてもメッセージは表示されます 読み取り専用で開いているにもかかわらず Application.DisplayAlerts = False ThisWorkbook.Save Application.DisplayAlerts = True とすれば メッセージが表示されずに閉じますが 保存しますか?→いいえ として閉じるよりも時間がかかります 読み取り専用で開いているのに保存されるのでしょうか?同じファイルを再び開くと変更した部分は保存されていません しかし、タイムスタンプは閉じた時間に更新されています これは普通なのでしょうか? この方法以外で保存しますか?のメッセージを出さないで保存しないで閉じる方法はないでしょうか?よろしく御願いします

  • エクセルVBA if、Elseifの使い方について

    調べたり、試行錯誤したのですが分からないので教えてください。 A列の最大値により表示されるメッセージを場合分けします。 (1)最大値が1~9の場合→「終了します」のメッセージを表示させる。 (2)最大値が0の場合  →「該当なし。シートを削除しますか?」のメッセージを表示させる。 (3)最大値が10の場合 →「すべて選択しています。シートを削除しますか?」のメッセージを表示させる。 メッセージをクリックした結果 (1)「はい」をクリックして終了。 (2)「はい」をクリックすれば、シートを削除。「いいえ」をクリックして終了。 (3)「はい」をクリックすれば、シートを削除。「いいえ」をクリックして終了。 'メッセージ Dim maxval As Long maxval = Application.Max(sheet1.Range("A:A")) If maxval >= 1 And maxval <= 9 Then MsgBox " 終了します" ElseIf maxval = 0 And vbYes = MsgBox("該当なし。シートを削除しますか?", vbYesNo) Then Application.DisplayAlerts = False sheet1.Delete Application.DisplayAlerts = True ElseIf maxval = 10 And vbYes = MsgBox("すべて選択しています。シートを削除しますか?", vbYesNo) Then Application.DisplayAlerts = False sheet1.Delete Application.DisplayAlerts = True End If End Sub (1)最大値が1~9の場合は成功します。 (2)(3)最大値が0の場合や10の場合に、「該当なし。シートを削除しますか?」と「すべて選択しています。シートを削除しますか?」の両方が、表示されてしまいます。 (2)(3)の場合に、それぞれのメッセージしか表示されないようにするにはどうしたらよいのでしょうか。 よろしくお願いします。

  • VBAでEXCELのワークシートを削除時に警告メッセージをでないようにしたい。

    ACCESSのVBAでEXCELのワークシートを削除時に警告メッセージをでないようにしたいのですが、 ネットを参考に下記のようにしたのですが、  Application.DisplayAlerts = False  ActiveSheet.Delete  Application.DisplayAlerts = True DisplayAlertsが反転してメソッドまたはデータメンバが見つかりません。とエラーメッセージがでます。 ご存知の方宜しくお願いします。