効かないApplication.DisplayAlerts = Falseなんて無いわ〜♪
他ブック参照系のマクロを操作するに当たって、クッソ邪魔なのがアラート系ポップアップである。
たとえばBookAからBookBを開きたいが、BookBにアラートが出る原因が含まれてるとする。すると、「このブックには更新できないリンクが1つ以上含まれています。」とか「ブック内の一部のリンクはすぐに更新できません。」とか「循環参照」とかが出てきてマクロが中断させられるわけだ。
まあ循環参照に関してはわざわざ己の意思でやることなんて稀だろうが(そして意思ゼロでやってる場合はアラート消す前にアラート出ないように直せ)、
問題はリンク切れである(というか今試したら、循環参照の場合は他ブック経由して開くとアラート出なかった)。
これに関しては他ブック参照の関係上、あえて放置している事も多々あるんではなかろうか。
それなのに、わざわざお節介のように知らせてきやがって…わかっとんねん!!余計なお世話じゃ!!
ちなみにこの記事を書こうと思ったきっかけは、消せないアラートがあるっぽい、あるらしい、ある、と、Excel情報系のサイト含めあちこちで、
「なんだかよくわからんが非表示に出来ないアラートがあるけどそんなもん(^p^)」
というようなことが割と書かれていたりしたからだ。
確かに、どんなにApplication.DisplayAlerts = FalseをThisWorkbookモジュールでWorkbook_open内に書いても、全くFalse出来ないこともあった。
それが上述の他ブック経由時である。
いったいどうすりゃええのん?と調べたときに、結果、そんなものやでぇ~という回答しか得られず、原因も謎のままとなりかけた。
が、
我輩は全くもって納得がいかなかった。
単独で開いたら効く非表示コードが、他ブック経由したからといって効かなくなるって何?
いくらなんでもバグが過ぎるだろ。
こんなことでマクロが中断されていいはずは無い。
何か理由があるはずだ!!
と。
そうしてとにかく試行した。
すると…
できたのである!!!
今ここに、そんなもんやでぇ~という適当なヤツらから世に広められし誤認識を訂正すべく、そしてExcelたんの汚名を晴らすべく、我輩は立ち上がった――。
前提:普通に設定で消せるアラートは消しておくこと(逆に設定で消えるもんはVBAで制御不能だったりする)。
例:コイツ↓
このブックには、安全でない可能性のある外部ソースへのリンクが~というやつだ。
これは、
データタブ>リンクの編集>起動時の確認で、
デフォルトの「メッセージを表示するかどうか選択する」から一番下の「メッセージを表示しないでリンクの自動更新を行う」に変更する。
ちなみに真ん中の表示もせず自動更新もしないやつを選ぶと、ただ更新されないだけなので、エラー検知せずもちろんアラートも表示されない。
それでいい諸君にはこの先の内容は不要であるし、そもそも悩むことは無いだろう。
そうではなく、
アラートは出したくないが、自動更新必須な状況
に陥っている諸君は、この設定が終わってから以下へどうぞである。
上記設定のあと、ポップアップの内容が、
ブック内の一部のリンクはすぐに更新できません。
などの文言へ、変化する。
これである。これが設定では消せないものなのだ。
まず、非表示に出来ない理由としてだが、我輩が試行した結果、アラートが出るのが先か、非表示コードが実行されるのが先かといった、単純なタイミングの問題だろうという結論に行き着いた。
つまり先にコードが実行されてしまえば問題なしである。
ということで、おかしなリンクを含むBookを開く前に、事前にアラートを非表示にしておく。
つまり、
BookAでマクロ実行→BookBが開かれるという流れなら、BookAのBookBを開くコードの直前にApplication.DisplayAlerts = Falseを差し込むのだ。
こんな感じ↓
それから開く!たったそれだけ!!!
これで、開いたブックのリンク更新エラーを回避できる。
ちなみに、他ブック経由するわけでは無く単独で開くときには、Thisworkbookのworkbook_openにSendKeys"~"または、Application.DisplayAlerts = False入れればOK。※SendKeys"~"=Enterキー押しているだけ。つまりポップアップ表示タイミングでうまいことEnter認識し継続が選択される。
これはOffice2007とOffice2016で、同じ条件で問題なく動作すること確認済である(このために購入3年以上経過でようやく己のPCに2016インストールしたわ※ずっと前のPCの2010使ってた)。まあなので多分、2019、2021でも問題ないんじゃないかね。
つか、10年も経過したならアラート制御の設定ぐらいできるようにしとけよマイクロソフト…。