【Word VBA】ユーザーフォームから文書にフォーカスを移すWordマクロ

2015年7月1日

Wordの[検索と置換]ダイアログボックスの強化版である「山猫の手」 のユーザーの方からご要望がありました。

ダイアログボックスを開いたままで、文書にフォーカスを移したいとのことでした。

さっそく作ってみました。次のアップデートで実装いたします。

このマクロでできること

ShowModalプロパティの値がFalseのユーザーフォーム(【コード】ユーザーフォームを表示したまま文書を編集する)で、このマクロを実行すると、ユーザーフォームを開いた状態で、現在開かれているファイルにフォーカスが移ります。

マクロ実行前

マクロ実行後

マクロの解説

まず最初にネットで調べて出てきたのが、以下のような方法です。
でも、うまく動きませんでした。

AppActivate "Microsoft Word" '←失敗

さらにネットで調べると、別の方法がありました。
そこで、こちらを試しましたがダメでした。

AppActivate Application.Caption '←失敗

多分、以下のような記事を参考にしているんだと思います。

Can't Use ActivateMicrosoftApp Method to Activate Excel

Excel VBA の説明ですが、かなり前の記事です。

さらに、こんなものも考えてみましたがダメでした。

AppActivate ActiveDocument.Name '←失敗

で、結局、Wordオブジェクト変数を作り、そのオブジェクトにフォーカスを移すことにしました。これで、ほしかった動作ができました。

 Dim myApp
 Set myApp = GetObject(, "Word.Application")
 myApp.Activate
 Set myApp = Nothing

よくよく考えたら、そんなに面倒なことをする必要ないことに気づき、次の一行で終わりました(笑)。

Application.Activate

マクロ


Private Sub CommandButton1_Click()

 Application.Activate
 
End Sub

参考記事

AppActivate ステートメント (MSDN)

Can't Use ActivateMicrosoftApp Method to Activate Excel

-コード
-, ,