我试图编写一个可在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年编译。因此,不存在运行时错误,但存在编译时错误。
最好的方法是什么?有没有办法在代码本身中禁用编译时检查?
答案 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
的东西总是会迟到的。