在 Excel VBA 用户窗体中显示 PDF

Posted

技术标签:

【中文标题】在 Excel VBA 用户窗体中显示 PDF【英文标题】:Display PDF in Excel VBA UserForm 【发布时间】:2017-05-08 14:43:22 【问题描述】:

我正在运行 Excel 2016,如果以下是兼容性问题,这可能是相关的...

简而言之,我正在尝试显示嵌入在 Excel 中的用户窗体中的 PDF。

我有一个用户窗体,比如UserForm1

我已启用以下额外引用:

Microsoft Visual Basic for Applications 可扩展性 5.3 Adobe Acrobat 浏览器控件类型库 1.0

这允许我将Adobe PDF Reader 添加为“附加控件”

该控件显示为一个阴影框图标(左下角),我不确定它是否意味着。然后,如果我尝试将这些对象之一添加到 UserForm1(以编程方式和设计视图),它会给我一个错误

找不到元素

作为参考,我使用的 VBA 的相关行是:

Dim PDFviewer As AcroPDF
Set PDFviewer = PDForm.Frame1.Controls.Add("AcroPDF.PDF.1")

我从这个 Adob​​e 论坛帖子中获取的内容:https://forums.adobe.com/thread/1065554

在线资源表明可能不再支持 AcroPDF 控件。如果是这样,还有其他方法可以实现我想要的吗?

【问题讨论】:

另一种方法是尝试添加浏览器控件,然后使用 Iframe 显示 PDF。 我将不得不查看浏览器控件,从提到 IFrame 开始,我想这会通过 html 进行操作? 是的,您将使用 pdf 路径即时创建一个 html 字符串并写入浏览器控件的文档。 太棒了!原来我什至不需要任何 HTML,可以直接使用 BrowserControl.Navigate <path> 命令引用 PDF 的路径。感谢您的建议! 很好,但是使用 html 部分是安全的,取决于机器设置,有时直接导航会启动下载而不是显示。罕见的网页浏览器控件仍然是 IE7,但可能。加上 2 行代码并没有那么多工作:) 【参考方案1】:

作为使用AcroPDF 的替代方法,请尝试使用WebBrowser 对象。

它需要包含额外的控件

Microsoft Web Browser

在名为WebBrowser1的用户窗体上添加一个WeBrowser

Private Sub UserForm_Click()
    Me.WebBrowser1.Navigate "about:blank"
    Me.WebBrowser1.Document.write "<HTML><Body><embed src=""C:\temp\SO_Answers\test.pdf"" 100%"" 100%"" /></Body></HTML>"
End Sub

您可以直接.Navigate 到 PDF,但是,引用我的评论:

“使用 html 部分更安全,取决于机器设置,有时直接导航会启动下载而不是显示。”

【讨论】:

您好,是否可以从文本框中的值显示 pdf? 所有文件都在同一个文件夹中。 是的。你可以。遍历文件夹位置,然后使用每个 pdf 文件名创建一个字符串,然后将完整路径作为 src 传递。 这只能在下面的代码中工作一次......之后它不显示PDF......知道为什么它在那之后不起作用吗? Me.WebBrowser1.Navigate "about:blank" '如果删除会出错 If IsIn(".pdf", FullPath) Then Me.WebBrowser1.Document.Write "": Exit Sub If IsIn(".txt", FullPath)然后 Me.WebBrowser1.Navigate "file:///" & Replace(FullPath, "\", "/"): Exit Sub Me.WebBrowser1.Navigate Get_URL(FullPath)【参考方案2】:

使用variable 作为src 来回答Chadee Fouad 问题的解决方法:

    将 html sintax 传递给字符串。稍后,将您的变量添加到该 sintax 中。

    sHtml = "<HTML><Body><embed src=""" & myPath & """100%"" 100%"" /></Body></HTML>"
    

    将您的variable sHtml 传递给IE.document.write

     IE.Document.write sHtml
    

    在 Internet Explorer 窗口中按 F12,您会注意到 src 是您的路径。

【讨论】:

我不清楚这是如何回答这个问题的,这个问题与在 Internet Explorer 中显示 PDF 无关。除此之外,您的步骤 (1) 与接受的答案相同,但有一个变量 确实如此。只是我没有足够的权限直接向 Chadee Fouad 添加评论,但一般其他人也可以尝试直接向 IE.Document.write 行添加变量 - 就像我第一次做的一样 -。所以这是给他们的,当我得到更多积分时,我会将其作为评论而不是答案移动。感谢您的反馈!

以上是关于在 Excel VBA 用户窗体中显示 PDF的主要内容,如果未能解决你的问题,请参考以下文章

Excel 崩溃,VBA 用户窗体无法保存

Excel VBA入门用户窗体开发

Excel-VBA - 列出任何给定工作簿的所有用户窗体的控件

如何使用 VBA 从 Excel 用户窗体中读取复选框的值

Excel VBA - 在用户窗体上手动调用文本框退出事件?

为啥 Excel 2010 VBA 用户窗体文本框字体会根据框架的大小而变化?