在 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")
我从这个 Adobe 论坛帖子中获取的内容: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 - 列出任何给定工作簿的所有用户窗体的控件