VBATips

AppActivateが最前面にならない場合の対処方法【ExcelVBA】

AppActivateの最前面に表示が正常に動作しない

指定ウィンドウを最前面に表示する【AppActivate】【ExcelVBA】が正常に動作しないケースが出てきました。

■正常に動作しない場合
・タスクバーのエクセルアイコンは点滅するが、エクセルが最前面に表示されない。
・毎回ではなく、不特定のタイミングで発生する。
・エクセルウィンドウが表示されないケースが多い。
IE自動制御で使用しているIEウィンドウはエラーが出てない(現時点では)

エクセルウィンドウを強制的に最前面表示させる

何かしらの理由で最前面に表示されないので、SendKeyメソッドを使用して最前面に表示します。
Alt + Tab キーのショートカットでウィンドウの入替をしましょう。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Sub sample_appactivate_error()
    Dim fTitle As String
    
    Application.Wait Now + TimeValue("0:00:03")
    Call AppActivate("Book1")


    '■フォアグランド(最前面)のタイトルバーテキストを取得
    fTitle = String(100, Chr(0))
    GetWindowText GetForegroundWindow, fTitle, Len(fTitle)
    fTitle = Left$(fTitle, InStr(fTitle, Chr(0)) - 1)
    
    '■フォアグランド(最前面)のウィンドウがBook1でない場合、「ALT+TAB」をSendKeyで送る
    If fTitle <> Application.Caption Then
        Application.SendKeys "%{tab}", True
    End If
End Sub

関連記事

指定ウィンドウを最前面に表示する【AppActivate】【ExcelVBA】
VBAでIE操作「Internet Explorerを最前面に表示」する

コメント

タイトルとURLをコピーしました