对象模型的VBA测试

时间:2017-10-26 13:44:59

标签: vba powerpoint

我试图编写一个可在PPT 2010和2013-2016中使用的PPT宏。 2013-16对象模型(ActivateChartDataWindow)中有一个对象不在我想要使用的2010模型中。我想过使用这样的代码来测试应用程序版本,然后使用正确的对象:

With theChart.ChartData
    If CInt(Application.Version) >= 15 Then
        .ActivateChartDataWindow
    Else
        .Activate
    End If
....
End With

问题是,由于找不到.ActivateChartDataWindow对象,因此无法在2010年编译。因此,不存在运行时错误,但存在编译时错误。

最好的方法是什么?有没有办法在代码本身中禁用编译时检查?

1 个答案:

答案 0 :(得分:2)

你正在进行早期成员电话会议;如果代码包含无法使用早期版本的类型库编译的成员调用,那么解决方案是切换到后期绑定调用,根据定义,它只在运行时绑定(即没有编译时验证) )。

因此,您需要声明With theChart.ChartData变量而不是Object,而Set变为theChart.ChartData

Dim lateBoundChartData As Object
Set lateBoundChartData = theChart.ChartData

现在针对该lateBoundChartData的所有成员通话只会在运行时进行验证 - 请注意拼写错误,Option Explicit无法帮助您!

With lateBoundChartData
    If CInt(Application.Version) >= 15 Then
        'no intellisense & compile-time validation here
        .ActivateChartDataWindow
    Else
        'no intellisense & compile-time validation here
        .Activate
    End If
End With

有趣的是,人们一直在编写后​​期编码,甚至没有意识到:你写的任何针对Object的东西总是会迟到的。