【问题标题】:Insert a PDF into Excel with Visual Basic使用 Visual Basic 将 PDF 插入 Excel
【发布时间】:2021-06-08 00:50:21
【问题描述】:

我正在编写一个允许用户将 PDF 插入工作表的宏。问题是不同的人有不同版本的 Adob​​e。此代码适用于我的机器:

ActiveSheet.OLEObjects.Add(ClassType:="Acrobat.Document.DC", Link:=False, DisplayAsIcon:=False).Activate

但是该代码会在别人的机器上产生错误,因为他需要这个:

ActiveSheet.OLEObjects.Add(ClassType:="AcroExch.Document.DC", Link:=False, DisplayAsIcon:=False).Activate

请注意 ClassTypes 是不同的。有没有办法检查 ClassType 是否存在?我想做这样的事情:

If Exists(ClassType("Acrobat.Document.DC")) Then
     ActiveSheet.OLEObjects.Add(ClassType:="Acrobat.Document.DC", Link:=False, DisplayAsIcon:=False).Activate
Else 
     ActiveSheet.OLEObjects.Add(ClassType:="AcroExch.Document.DC", Link:=False, DisplayAsIcon:=False).Activate
End If

注意:我可以通过使用 On Resume Error Next 来强制执行此操作,但这似乎不是最干净的方法。

【问题讨论】:

  • 这是最干净的方式。在编程中,我们尝试并测试是否成功。 COM 期待这一点

标签: excel vba pdf


【解决方案1】:

为此目的使用On Error Resume Next 是完全正常的。这是一个例子

Sub Sample()
    Dim objAcrobat As Object
    Dim objAcroExch As Object
    
    On Error Resume Next
    Set objAcrobat = CreateObject("Acrobat.Document.DC")
    Set objAcroExch = CreateObject("AcroExch.Document.DC")
    On Error GoTo 0
    
    If Not objAcrobat Is Nothing Then
        MsgBox "Acrobat found"
    Else
        MsgBox "Acrobat not found"
    End If
    
    If Not objAcroExch Is Nothing Then
        MsgBox "AcroExch found"
    Else
        MsgBox "AcroExch not found"
    End If
End Sub

因为我两者都有,所以我都“找到”了。

你的用法是这样的

Sub Sample()
    Dim objAcrobat As Object
    Dim objAcroExch As Object
    
    On Error Resume Next
    Set objAcrobat = CreateObject("Acrobat.Document.DC")
    Set objAcroExch = CreateObject("AcroExch.Document.DC")
    On Error GoTo 0
    
    If Not objAcrobat Is Nothing Then
        ActiveSheet.OLEObjects.Add(ClassType:="Acrobat.Document.DC", _
                                   Link:=False, _
                                   DisplayAsIcon:=False).Activate
    ElseIf Not objAcroExch Is Nothing Then
        ActiveSheet.OLEObjects.Add(ClassType:="AcroExch.Document.DC", _
                                   Link:=False, _
                                   DisplayAsIcon:=False).Activate
    Else
       MsgBox "Abobe not installed"
    End If
End Sub

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 2013-04-24
    • 2012-09-09
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多