派遣事務員の迷走

派遣事務員コロ子。会社の犬。顔出しNG。常に迷走している。

VBA ExcelからWordを立ち上げてWordが前面に来る方法

こんにちは。
派犬事務員のコロ子です。

タカハシノリアキさん著
「パーフェクトExcelVBA」が11月25日に発売
される。

なんと、ノンプロ研メンバーは発売前の草稿の状態から読めるという超お得な特権がある。
にもかかわらず「本が発売されたら読めばいいや~、PDFより紙の方が読み安いし」となかなか読み始めなかった。
ノンプロ研中級講座【VBAコース】のTAをすることになって、10月頃から慌てて読み始めた。(遅すぎ)

内容はかなり濃いめで、これからVBAを始める人よりある程度かじっている人向け。コロ子のようにずっと独学で自分勝手に解釈しながら勘違いしまくってる人にはすごく為になる。
しかしヘビー過ぎるところもあってなかなか進まない。
先日、VBA講座を受講している方から「これはパーフェクトExcelVBAの〇〇ページに書いてある事ですか?」とまだ読んでないところを質問され、おかげでスピードアップした。
あともうちょっとだ。
発売前に全部読んで、世間にマウントを取るのだ!

・・理想のマウント会話・・
「え?パーフェクトExcelVBA?それならもう読んだよ。すごくいいよね~」
(ちっちゃいヤツ(犬)だなぁ。)


そんな訳でパーフェクトExcelVBAを読んでいて、
「やり方わからないからまぁいいや」とずーっとほったらかしにしていた所が解決したので、メモっておこう。

アプリケーションを前面にする

この記事のタイトルを
VBA ExcelからWordを立ち上げてWordが前面に来る方法」
としたけど、要は「アプリケーションを前面にする」ということで、この「アプリケーションを前面にする」というワードが思いつかなくて、調べようにも検索がヒットせずに敗北した。

下記コードでExcelからWord「テスト.docx」を立ち上げる

Sub OpenWord()

Dim wd As Object
Dim wdoc As Object
 
Set wd = CreateObject("Word.Application")
wd.Visible = True
 
'テスト.docxを開く
Set wdoc = wd.Documents.Open("D:\ブログ\テスト.docx")

   ↓
f:id:SNegishi:20191110181421p:plain

パソコン下のタスクバーにWordのアイコンが表示される。
でもExcelが前面のまま。


AppActivateで前面にできる

【構文】AppActivate title、[ wait ]

title 必須。 アクティブ化するアプリケーション ウィンドウのタイトル バーに表示されるタイトルを指定する 文字列型 (String) の式です。 Shell 関数から返されるタスク ID を title の代わりに使用してアプリケーションをアクティブ化することもできます。
(Office デベロッパーセンターより)


Shellで立ち上げたのではないのでIDはない。
「タイトル バーに表示されるタイトル」
っていったいどこだろう・・・?


いろいろ試した結果

f:id:SNegishi:20191110190403p:plain

ワードの上に表示されている名前だった。

ちなみにコロ子はWord2016を使っているけど、会社のパソコンは2010で表示が違う。

f:id:SNegishi:20191110190432p:plain

バージョンによって表示が違うので注意。

Word2016:ファイル名 - Word
Word2010:拡張子付きファイル名 - Microsoft Word

この先、バージョンによって表示が変わる可能性があるので、念のためエラー処理を入れておこう。

Sub OpenWord()

Dim wd As Object
Dim wdoc As Object
 
Set wd = CreateObject("Word.Application")
wd.Visible = True
 
'テスト.docxを開く
Set wdoc = wd.Documents.Open("D:\ブログ\テスト.docx")

'Wordを前面に
On Error Resume Next
Call AppActivate("テスト - Word")

ちなみに、
wd.Visible = Trueをwd.Visible = Falseにしてみたら
Wordファイルは立ち上がっているのに「どこにも表示されていない」という困った状況になる。閉じ方が面倒なので注意。