我正在编写一个宏,允许用户将PDF插入工作表。问题是不同的人有不同的Adobe版本。下面的代码可以在我的机器上运行:
ActiveSheet.OLEObjects.Add(ClassType:="Acrobat.Document.DC", Link:=False, DisplayAsIcon:=False).Activate
但是这个代码会在别人的机器上产生错误,因为他需要这个:
ActiveSheet.OLEObjects.Add(ClassType:="AcroExch.Document.DC", Link:=False, DisplayAsIcon:=False).Activate
注意类类型是不同的。是否有一种方法来检查一个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来强制执行此操作,但这似乎不是最干净的方法。
使用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