ボロボロ皇帝のボロ切れと塊

ボロボロ皇帝が悪態、嫌み、好み、何でも己の視点だけで自由に吐く「偏」な場所。たまにExcel、家電、音楽等についても好きに吐いてる。

ボロボロ皇帝が悪態、嫌み、好み、何でも己の視点だけで自由に吐く「偏」な場所。
Excel、家電、音楽、ゲームイラスト小説映画、性癖について等、何でも好きに吐いてる。

どうでも良いかもしれんが背景色変わっていくの見てくれ。
更にどうでも良いかもしれんがアイコンが息してるの見てくれ。


我輩は何にも制約されない身、
「耐えぬ」事を恐れないと決めたのだ!
我輩は好きなときに悪態をつく!
妬み僻み嫉みを背負い、
マイナーだろうが邪道だろうが
我輩は我輩の道を行く!
好きなものは懸命で不器用な諸君,
嫌いなものは器用で完璧を気取った奴らだ。
         

【VBA】Excelにおけるアラートポップアップは正しいタイミングを理解すれば制御できる~非表示に出来ないアラートは基本無い~

 

効かないApplication.DisplayAlerts = Falseなんて無いわ〜♪

 

 

他ブック参照系のマクロを操作するに当たって、クッソ邪魔なのがアラート系ポップアップである。


たとえばBookAからBookBを開きたいがBookBにアラートが出る原因が含まれてるとする。すると、「このブックには更新できないリンクが1つ以上含まれています。」とか「ブック内の一部のリンクはすぐに更新できません。」とか「循環参照」とかが出てきてマクロが中断させられるわけだ。

まあ循環参照に関してはわざわざ己の意思でやることなんて稀だろうが(そして意思ゼロでやってる場合はアラート消す前にアラート出ないように直せ)、

問題はリンク切れである(というか今試したら、循環参照の場合は他ブック経由して開くとアラート出なかった)。

これに関しては他ブック参照の関係上あえて放置している事も多々あるんではなかろうか。

 

それなのに、わざわざお節介のように知らせてきやがって…わかっとんねん!!余計なお世話じゃ!!

 

ちなみにこの記事を書こうと思ったきっかけは、消せないアラートがあるっぽい、あるらしい、ある、と、Excel情報系のサイト含めあちこちで
「なんだかよくわからんが非表示に出来ないアラートがあるけどそんなもん(^p^)」
というようなことが割と書かれていたりしたからだ。


確かに、どんなにApplication.DisplayAlerts = FalseThisWorkbookモジュールWorkbook_open内に書いても全くFalse出来ないこともあった。
それが上述の他ブック経由時である。


いったいどうすりゃええのん?と調べたときに、結果、そんなものやでぇ~という回答しか得られず、原因も謎のままなりかけた


が、
我輩は全くもって納得がいかなかった。

 

単独で開いたら効く非表示コードが、他ブック経由したからといって効かなくなるって何?

いくらなんでもバグが過ぎるだろ

こんなことでマクロが中断されていいはずは無い。

何か理由があるはずだ!!


と。

 

そうしてとにかく試行した。

すると…

できたのである!!!

 

今ここに、そんなもんやでぇ~という適当なヤツらから世に広められし誤認識を訂正すべく、そしてExcelたんの汚名を晴らすべく、我輩は立ち上がった――。

 

 

前提:普通に設定で消せるアラートは消しておくこと(逆に設定で消えるもんはVBAで制御不能だったりする)。

例:コイツ↓

f:id:wornoutemperor:20211023163149j:plain

このブックには、安全でない可能性のある外部ソースへのリンクが~というやつだ。

 

これは、

データタブ>リンクの編集起動時の確認で、

デフォルトの「メッセージを表示するかどうか選択する」から一番下メッセージを表示しないでリンクの自動更新を行う」に変更する

f:id:wornoutemperor:20211023163332j:plain

ちなみに真ん中の表示もせず自動更新もしないやつを選ぶと、ただ更新されないだけなので、エラー検知せずもちろんアラートも表示されない

それでいい諸君にはこの先の内容は不要であるし、そもそも悩むことは無いだろう。

そうではなく、

アラートは出したくないが、自動更新必須な状況

に陥っている諸君は、この設定が終わってから以下へどうぞである。

 

上記設定のあと、ポップアップの内容が、

f:id:wornoutemperor:20211023163210j:plain

ブック内の一部のリンクはすぐに更新できません。

などの文言へ、変化する。

これである。これが設定では消せないものなのだ。

 

 

まず、非表示に出来ない理由としてだが、我輩が試行した結果、アラートが出るのが先か、非表示コードが実行されるのが先かといった、単純なタイミングの問題だろうという結論に行き着いた。

つまり先にコードが実行されてしまえば問題なしである。

 

 

ということで、おかしなリンクを含むBookを開く前に、事前にアラートを非表示にしておく

つまり、

BookAでマクロ実行BookBが開かれるという流れなら、BookABookBを開くコードの直前Application.DisplayAlerts = Falseを差し込むのだ。

こんな感じ↓

f:id:wornoutemperor:20211023183113j:plain

それから開く!たったそれだけ!!!

 

これで、開いたブックのリンク更新エラーを回避できる

ちなみに、他ブック経由するわけでは無く単独で開くときには、Thisworkbookのworkbook_openにSendKeys"~"または、Application.DisplayAlerts = False入れればOK。※SendKeys"~"=Enterキー押しているだけ。つまりポップアップ表示タイミングでうまいことEnter認識し継続が選択される。

 

 

これはOffice2007Office2016で、同じ条件で問題なく動作すること確認済である(このために購入3年以上経過でようやく己のPCに2016インストールしたわ※ずっと前のPCの2010使ってた)。まあなので多分、2019、2021でも問題ないんじゃないかね。

 

つか、10年も経過したならアラート制御の設定ぐらいできるようにしとけよマイクロソフト…。