简体   繁体   中英

Bring previous opened window (Word document) to foreground

Suppose I have two hyperlinks (on excel sheet) referring to two documents:
eg ( A.doc and B.doc ) on my local intr.net.
I will open the first document "A.doc" then I will open the second one "B.doc"
The problem:
If there is already an opened word document and then I clicked hyperlink (Word Document on my local intr.net), The later file is not opened automatically and I have to click on the flashing taskbar button to open the cited second file.
This issue occurs only with Microsoft word documents found on my local intr.net.
If there is no open document and I clicked on any word hyperlink, It opens normally without any issue.
Please watch this short video to understand my problem.
I need to utilize FollowHyperlink event in excel or any other method to:
bring the previous opened window A.doc to front and then bring the second one B.doc to front.
you may find it a strange question!
But I have to do it manually each time to show and bring the second one to front.
I have used this API code (in a Word document) on Normal-ThisDocument :

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                   (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Dim LHwnd As Long

Private Sub Document_Open()
    If Application.Documents.Count > 1 Then
       LHwnd = FindWindow("rctrl_renwnd32", Application.ActiveWindow.Caption)
       SetForegroundWindow (LHwnd)
    End If 
End Sub

And used that code on my excel sheet itself:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    On Error Resume Next
      Dim objWd As Object
       Set objWd = GetObject(, "Word.Application")
      AppActivate objWd.ActiveWindow.Caption
    Set objWd = Nothing
End Sub

Finally, I found this helpful page Bring an external application window to the foreground
But I could not adapted it to my need.

Please, try the next BeforeDoubleClick event. If the problem is related only to hyperlinks, it should work...

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.column = 1 And Target.Value <> "" Then 'limit this behavior to the first column
        If LCase(left(Target.Value, 5)) = "http:" Then
            Cancel = True
             Dim objWd As Object, d As Object, arrD: arrD = Split(Target.Value, ".")
             If LCase(left(arrD(UBound(arrD)), 3)) <> "doc" Then Exit Sub
            On Error Resume Next
                 Set objWd = GetObject(, "Word.Application")    'find the Word open session, if any
            On Error GoTo 0
            If objWd Is Nothing Then
                Set objWd = CreateObject("Word.Application")
            End If
            
            With objWd
                .Visible = True
                Set d = .Documents.Open(Target.Value)
             End With
             
             'force somehow the new open document window expose its handler...
             Dim i As Long
             Do Until objWd.ActiveWindow.Caption = d.name Or _
                   objWd.ActiveWindow.Caption = d.name & " [Read-Only] [Compatibility Mode]"
                    i = i + 1: Debug.Print objWd.ActiveWindow.Caption, d.name & " [Read-Only] [Compatibility Mode]"
                    DoEvents: If i >= 10 Then Exit Do 'just in case, if something unexpected happens...
             Loop
             SetForegroundWindow CLngPtr(objWd.ActiveWindow.hWnd)
        End If
    End If
End Sub

It should work in 64 bit, but it is easy to be adapted for both cases, supposing that it works as you need.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM