VBA размещает веб-браузер вне пользовательской формы в Office2019 - PullRequest
0 голосов
/ 06 июля 2019

В течение многих лет - в Office2013 - мы использовали / использовали несколько пользовательских форм с веб-браузером (ссылка на Microsoft Internet Controls) для отображения PDF-документов в пользовательской форме.

Поскольку мы мигрировали в Office2019, веб-браузер отображается вне пользовательской формы и помещается за родительским окном пользовательской формы (то есть Outlook или Excel). Это происходит, когда макрос активируется с помощью кнопки на ленте.

Но, при запуске пользовательской формы из VBE с F5 (либо прямо из формы, либо через макрос в модуле, который загружает / показывает форму), он работает так, как ожидалось.

Кто-нибудь знает, где искать решение этой проблемы?

Код, используемый в пользовательской форме для отображения файла PDF

Me.WebBrowser1.Navigate URL:="D:\file.pdf"

Код, используемый в модуле для отображения пользовательской формы

Sub MacroName()
   Load Userform
   Userform.Show
End Sub

1 Ответ

0 голосов
/ 07 июля 2019

Вы можете попытаться установить родительское окно для своего экземпляра пользовательской формы. SetParent меняет родительское окно указанного дочернего окна.

Function SetFormParent(UF As MSForms.UserForm, _
    Parent As FORM_PARENT_WINDOW_TYPE) As Boolean
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' SetFormParent
' Set the UserForm UF as a child of (1) the Application, (2) the
' Excel ActiveWindow, or (3) no parent. Returns TRUE if successful
' or FALSE if unsuccessful.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim UFHWnd As Long
Dim WindHWnd As Long
Dim R As Long

UFHWnd = HWndOfUserForm(UF)
If UFHWnd = 0 Then
    SetFormParent = False
    Exit Function
End If

Select Case Parent
    Case FORM_PARENT_APPLICATION
        R = SetParent(UFHWnd, Application.hwnd)
    Case FORM_PARENT_NONE
        R = SetParent(UFHWnd, 0&)
    Case FORM_PARENT_WINDOW
        If Application.ActiveWindow Is Nothing Then
            SetFormParent = False
            Exit Function
        End If
        WindHWnd = WindowHWnd(Application.ActiveWindow)
        If WindHWnd = 0 Then
            SetFormParent = False
            Exit Function
        End If
        R = SetParent(UFHWnd, WindHWnd)
    Case Else
        SetFormParent = False
        Exit Function
End Select
SetFormParent = (R <> 0)

End Function
...