VBA将Webbrowser置于Office2019之外的用户窗体中

时间:2019-07-06 09:13:12

标签: excel vba webbrowser-control outlook-vba

多年来-在Office2013中-我们/正在使用带有Web浏览器控件(参考Microsoft Internet控件)的多个用户表单,以在用户表单中显示pdf文档。

自从我们迁移到Office2019之后,Web浏览器就显示在用户窗体的外部,并放在用户窗体的父窗口(即Outlook或Excel)的后面。当从功能区上的按钮激活宏时,会发生这种情况。

但是,当使用F5从VBE运行用户窗体(直接从窗体或通过加载/显示窗体的模块中的宏)运行时,它的工作原理与预期的一样。

有人知道在哪里解决这个问题吗?

用户表单中用于显示pdf文件的代码

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

模块中用于显示用户表单的代码

Sub MacroName()
   Load Userform
   Userform.Show
End Sub

2 个答案:

答案 0 :(得分:0)

您可以尝试为用户表单实例设置父窗口。 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

答案 1 :(得分:0)

我在Office 365的Outlook中使用VBA遇到了同样的问题。 不知道这是否适合您,但我的问题已通过转到Outlook选项>常规得到解决。然后在“用户界面选项”下的“使用多个显示器时”设置下,选择“优化兼容性”选项

然后重新启动Outlook。同样的选项也应该在Excel中可用。尝试看看是否可行。它为我工作。我希望它也对您有用。