3

假设您有一张幻灯片,上面有一张图表,并且您运行以下代码(在 2007 年以后的 Office 版本中):

Dim pptWorkbook As Object
Dim result As Object

Set pptWorkbook = ActivePresentation.slides(1).Shapes(1).Chart.ChartData.Workbook
Set result = pptWorkbook.ContentTypeProperties

你会产生一个错误:

应用程序定义或对象定义的错误

我相信这是因为“智能标签在 Office 2010 中已弃用。”(来源),通常为了避免此类问题引发错误并退出 VBA,您可以采用两种不同方法之一:

//Method 1
If OfficeVersion <= 2007
    Set result = pptWorkbook.ContentTypeProperties

//Method 2
On Error Resume Next // or GOTO error handler
Set result = pptWorkbook.ContentTypeProperties

方法一要求您知道属性会导致错误的具体原因,这在这种情况下很容易,但对于其他属性可能就不那么容易了。方法二要求您使用某种形式的错误处理来处理错误事实上,我对大多数其他 Microsoft 语言的理解通常是不鼓励的(例如另一个示例)。这是VBA中的标准做法吗?

在 VBA 中,是否有任何其他方法可以确定对象的属性在调用该属性之前是否会引发错误,并且不知道该调用属性的细节?

4

1 回答 1

-1

对于这种情况,我喜欢做的是创建一个单独的函数来检查属性是否存在并返回一个布尔值。在这种情况下,它看起来像这样:

Public Function CheckIfExists(targetObj As Object) As Boolean
Dim testObj As Object
On Error GoTo failedTest:
Set testObj = targetObj.ContentTypeProperties
CheckIfExists = True
Exit Function
failedTest:
CheckIfExists = False
End Function

如果该属性导致错误,则返回 false,否则返回 true-

然后将您的子修改为:

Public Sub FooSub()
Dim pptWorkbook As Object
Dim result As Object

Set pptWorkbook = ActivePresentation.slides(1).Shapes(1).Chart.ChartData.Workbook
If CheckIfExists(pptWorkbook) Then
    Set result = pptWorkbook.ContentTypeProperties
End If

...您的其余代码或适当的错误处理...

希望这会有所帮助,TheSilkCode

于 2017-01-17T05:09:52.173 回答