自動実行マクロを起動しないで開く
プログラムで開く間だけVBAマクロを無効化し、終了時に元の設定を戻します。
実行前に確認
- Excel 4.0マクロはこの設定だけでは無効化されず確認が出る場合があります。保護ビュー等の安全機能を解除するコードではありません。
1サンプルコード
Sub Sample3054()
Dim p As Variant, oldSecurity As MsoAutomationSecurity
p = Application.GetOpenFilename("Excel Files,*.xlsm;*.xlsx;*.xlsb")
If VarType(p) = vbBoolean Then Exit Sub
oldSecurity = Application.AutomationSecurity
On Error GoTo Failed
Application.AutomationSecurity = msoAutomationSecurityForceDisable
Workbooks.Open Filename:=CStr(p), UpdateLinks:=0, ReadOnly:=True
Application.AutomationSecurity = oldSecurity
Exit Sub
Failed:
Application.AutomationSecurity = oldSecurity
MsgBox "開けませんでした: " & Err.Description
End Sub図で見る操作の流れ
イメージ図概念図:開く間だけ設定を変え、前の設定へ戻します。
手動:選択
xlsm・xlsx・xlsbから開くファイルを選ぶ
マクロ:一時変更
元のAutomationSecurityを覚え、VBAマクロを強制無効化
マクロ:開く
リンク更新なし・読み取り専用で開く
マクロ:復元
成功時もエラー時も、元のAutomationSecurityへ戻す
キャンセルなら終了。Excel 4.0マクロや保護ビュー等には別の制約・確認があります。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する3つの手順で、コードの使い方を確認できます
- 1
練習用のブックをExcelマクロ有効ブック(.xlsm)で保存します。別の練習ファイルを用意します。
- 2
Alt+F11でVBEを開き、[挿入]→[標準モジュール]にコードを貼り付けます。
- 3
Sample3054内にカーソルを置いてF5で実行します。プログラムで開く間だけVBAマクロを無効化し、終了時に元の設定を戻します。