【入門編】【初心者向け】Visioの保存処理で発生する「上書き確認ダイアログ」をVBAで完全に無効化する方法 – Visio VBA解析バイブル

スポンサーリンク

こんにちは。Visioの世界へようこそ。
マクロの記録ボタンを押して生成されたコードを眺め、「なぜか動かない」「エラーで止まる」と頭を抱えたことはありませんか?

Visio VBAにおける最大の「壁」の一つ、それが保存時のダイアログです。自動化の最中に「ファイルを上書きしますか?」なんて尋ねられたら、プログラムはそこで思考停止してしまいますよね。

今日は、そんなストレスを解消し、あなたのマクロを「真の全自動」へと昇華させるための極意をお伝えします。

—

なぜダイアログが出るのか? Visioの「親切心」の正体

Visioは非常に親切なアプリケーションです。あなたがプログラムを通じて「保存しろ」と命令したとき、もし同じ名前のファイルが既に存在していたら、Visioは「これ、上書きして本当にいいの?」とユーザーの確認を待とうとします。

しかし、自動化エンジニアにとって、この確認は「邪魔なノイズ」です。プログラムはユーザーの入力待ち状態(ブロッキング)に陥り、処理が止まってしまう。これを防ぐのが、今回紹介する `Application.AlertResponse` プロパティです。

魔法のプロパティ:AlertResponse を操れ

`AlertResponse` は、Visioが何かを尋ねようとしたときに、「あらかじめ回答を決めておく」ためのプロパティです。

例えば、「上書きしますか?」に対して「はい(ID: 6)」という回答を事前にセットしておけば、Visioはユーザーに聞くことなく、自動的に「はい」を選択して処理を続行します。

実践コード:サイレント保存のテンプレート

以下のコードは、どんな現場でも使える「上書き確認を無視して保存する」ための定石です。

Sub SilentSaveAs()
Dim doc As Visio.Document
Dim targetPath As String

Set doc = ActiveDocument
targetPath = “C:\Projects\Export\MyDiagram.vsdx”

‘ — ここが極意の領域 —
‘ 1. 現在のAlertResponseを退避(念のため)
Dim originalAlert As Long
originalAlert = Application.AlertResponse

‘ 2. “はい” を強制する(ID: 6 は「はい」を意味する定数)
Application.AlertResponse = 6

On Error GoTo ErrorHandler

‘ 3. 保存実行(既にファイルがあってもダイアログは出ない)
doc.SaveAsEx targetPath, visSaveAsWS

‘ 4. 後処理:必ず元に戻す(重要!)
Application.AlertResponse = originalAlert

MsgBox “保存が完了しました!”, vbInformation
Exit Sub

ErrorHandler:
‘ エラー時もAlertResponseを元に戻さないと、Visioが壊れたような挙動になる
Application.AlertResponse = originalAlert
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub

コードを読むときの3つのポイント

1. 「ID: 6」の意味を知る
Windowsのダイアログにはそれぞれ応答コードがあります。「はい」は6、「いいえ」は7です。`AlertResponse`にこの数値を代入することで、プログラムが「身代わり」となって答えてくれるのです。
2. 必ず「元に戻す(復元)」こと
ここが一番重要です。`Application.AlertResponse = originalAlert` を忘れると、あなたのPCのVisioはずっと「何でもかんでも自動的に『はい』と答える」という危険な状態になります。「設定を変えたら必ず戻す」。これが自動化エンジニアの鉄則です。
3. エラーハンドリングを怠らない
もし保存処理の途中でエラーが起きたら? そのままでは`AlertResponse`が元に戻りません。`On Error GoTo` を使い、異常終了時でも必ず設定をクリーンアップする構成にしましょう。

初学者が陥りやすい「罠」

「マクロの記録」で生成された `ActiveDocument.SaveAs` をそのまま使っていませんか?

実は、`SaveAs` メソッドは非常に古い書き方です。業務自動化の現場では、より詳細なオプション(読み取り専用での保存や、特定の形式での変換など)を指定できる `SaveAsEx` を使うのがプロの流儀です。

また、PDF出力についても、同じように `AlertResponse` を設定してから `ExportAsFixedFormat` メソッドを呼べば、PDF出力時の「ファイルが存在します」といった確認ダイアログも同様に沈黙させることができます。

最後に:自動化の先にある景色

ここをクリアすれば、あなたはもう「ボタンを押して待つだけ」の作業からは卒業です。
PDFへの一括変換、大量の図面ファイルからのデータ抽出……Visio VBAでできることは無限に広がります。

まずはこの「沈黙の保存」をマスターし、自分のプログラムが誰の手も借りずに黙々とタスクをこなす快感を味わってください。エンジニアとしての最初の一歩は、ここからです。

何か分からないことがあれば、またいつでも聞きに来てくださいね。あなたのコードが美しく動くことを、心から応援しています。

タイトルとURLをコピーしました