VBAのExcelでDDEの罠
はじめに
前回はExcelでDDEの罠を紹介しましたが、その応用編です。あんまり書くことないのでショートです。
Excel VBAの世界でGO
Excel VBAって書いてますけど、Visual Basicで書いたアプリケーションでも同様です。
警告ダイアログってウザいよね?
Excel VBAを使っていると、警告ダイアログが表示さえるのがウザかったり、選択で「はい」「いいえ」「キャンセル」を選ばれたくない場合があります。
どっちの場合も、Application.DisplayAlertsプロパティをFalseにすると
保存処理の場合
こんな感じですね。これは(多分)安全です。
Application.DisplayAlerts = False
' 保存処理
Application.DisplayAlerts = True
保存処理が終わったらDisplayAlertsをTrueに戻すのはお作法です。
ファイルオープン時の警告抑止
こんなコード、それってマナー違反です!?
Application.DisplayAlerts = False
Workbooks.Open("hoge.xls")
Application.DisplayAlerts = True
Workbooks.Openはわりと柔軟で、xlsじゃなくてもCSVやTXTも読み込めます(多分)。参考までにファイルオープンの機能はいくつかあります。
- Workbooks.Open
- Workbooks.OpenText
- QueryTables.Add
サーセン、それぞれの動作までは調べてません。
なんかヤバいの?
ExcelでDDEの罠で紹介した仕様を組み合わせると、怖い動きをします。多分、仕様です。試した感じだと、警告ダイアログをOFFにしてマクロ有効で開きます。マクロ有効?DDEで頓死ですね。Excel側設定でOFFにすることも可能なので、マクロ自動実行されるのは利便性のための仕様です。
なお、Application.DisplayAlertsプロパティは警告メッセージを抑止する機能なので、警告がでないのは仕様通りと思われます。
どうすればいいんでしょうか?
OpenのときはApplication.DisplayAlerts = Trueにしましょう。SaveAsなんかで真に必要な場合はApplication.DisplayAlerts = Falseして処理してTrueに戻しましょう。
あるいは試してないけど、OpenTextだと大丈夫かもしれません。
魔法の呪文
大人の事情により、詠唱破棄!