Excelの表をWordの表に変換するというVBAを書いていたところ、Wordを呼び出してもExcelの背面に隠れてしまうという現象に悩まされていました。
プログラムはこんな感じ。
Dim uWord As New Word.Application
Dim uDoc As Word.Document
uWord.Visible = True
uWord.Activate
Set uDoc = uWord.Documents.Add
テストしながら作っているときはちゃんと前面に来ていたのに、Excelを落として起動するところから始めるとWordが背面で起動してしまいます。
ググれどもググれども情報がなく、ようやく先程みつけました。
[URL]
どうやらWindows 7以降に実装された一種のセキュリティメカニズムで、他のアプリケーションが邪魔しないようにしてあるらしい。
あるアプリケーションは、同じプロセスで走っていない別のアプリケーションの並び順を変更できないらしい。
開発中に上手くいくときもあったのは、この条件を回避できる時があったのかもしれません。
回避策1:
Application.ActivateMicrosoftApp xlMicrosoftWord
これは一行で簡単だけれど、試してみると、最後の行に置くと文書2が開いてしまう。Documents.Addの前に持っていくと開かないけれど、後々ちょっと不気味。
回避策2:
uWord.WindowState = wdWindowStateMinimize
uWord.WindowState = wdWindowStateNormal
最小化して、もとに戻すという至ってシンプルな方法です。
とりあえずWindows 10では動作しました。
というわけで、ようやく解決したようです。
\(^o^)/
今夜はよく眠れそうです。
( ̄^ ̄)
2018-06-08
作業中に突然前面に表示されたアプリをうっかり操作してしまわないために、Vistaから追加された機能のようです。そういえばそんな話があったような気がします。
[URL]
セコメントをする