在Excel VBA用户窗体中显示PDF

9

我正在使用Excel 2016,如果下面的内容与兼容性有关,则可能会起到作用...

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

我有一个用户窗体,称为UserForm1

我启用了以下额外的引用:

  • Microsoft Visual Basic for Applications Extensibility 5.3
  • Adobe Acrobat Browser Control Type Library 1.0

这样我就可以将Adobe PDF Reader添加为“其他控件”

Additional Controls dialog

该控件显示为一个带有斜线框的盒子图标(左下角),我不确定它是否是为此而设计的。然后,如果我尝试向UserForm1添加其中一个对象(无论是以编程方式还是在设计视图中),都会出现错误

未找到元素

供参考的VBA代码行如下:

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

以下是我从Adobe论坛帖子中获取的信息:https://forums.adobe.com/thread/1065554

在线资源建议可能是AcroPDF控件不再受支持。 如果是这样,是否有其他方法可以实现我想要的功能?


1
一个可行的替代方案是尝试添加一个浏览器控件,然后使用Iframe来显示PDF。 - cyboashu
我需要研究一下浏览器控件,从提到IFrame来看,我猜测这是通过HTML进行操作的? - Wolfie
是的,您将使用PDF路径动态创建HTML字符串,并将其写入浏览器控件的文档中。 - cyboashu
2
太棒了!原来我甚至不需要费心处理任何HTML,可以直接使用“BrowserControl.Navigate <path>”命令引用PDF的路径。感谢您的建议! - Wolfie
1
很好,但根据机器设置,有时直接导航将启动下载而不是显示,因此使用html部分是安全的。由于Web浏览器控件仍为IE7,这种情况很少发生,但确实存在。再加上两行代码也不算太麻烦 :) - cyboashu
1个回答

12
作为使用 AcroPDF 的替代方案,请尝试使用 WebBrowser 对象。
需要包含额外的控件: Microsoft Web Browser 在用户窗体上添加一个名为 WebBrowser1 的 WebBrowser。
Private Sub UserForm_Click()
    Me.WebBrowser1.Navigate "about:blank"
    Me.WebBrowser1.Document.write "<HTML><Body><embed src=""C:\temp\SO_Answers\test.pdf"" width=""100%"" height=""100%"" /></Body></HTML>"
End Sub

您可以直接使用.Navigate访问PDF文件,但是引用我的评论:

"根据机器设置,有时直接访问将启动下载而不是显示,因此使用HTML部分更安全。"


你好,能否通过文本框中的值显示一个PDF文件? - Ammadeux
文件将全部位于同一个文件夹中。 - Ammadeux
可以的。遍历文件夹位置,然后创建一个字符串,其中包含每个PDF文件的名称,然后将完整路径作为“src”传递。 - cyboashu
在下面的代码中,这只能工作一次...之后它就不会显示PDF了...有什么想法为什么它在那之后不起作用?Me.WebBrowser1.Navigate "about:blank" '如果删除将导致错误如果 FullPath 中包含“.pdf”,则 Me.WebBrowser1.Document.Write "<HTML><Body><embed src=" & """" & FullPath & """" & "width=""125%"" height=""125%"" /></Body></HTML>": Exit Sub 如果 FullPath 中包含“.txt”,则 Me.WebBrowser1.Navigate "file:///" & Replace(FullPath, "", "/"): Exit Sub Me.WebBrowser1.Navigate Get_URL(FullPath) - Chadee Fouad
尝试导航到该页面或嵌入该页面都会导致它尝试启动下载而不是显示。有没有解决方法? - VeryColdAir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接