我正在嘗試編寫一個代碼模塊,該模塊將與PowerPoint 2003以及與2007年引入的顏色模型更改有關的所有較新版本主題與VBA對象模型中的方案),但是這個問題可能隨着任何對象模型的改變而增加。用於PowerPoint 2003和2007/2010/2013對象模型兼容性的條件VBA代碼
PowerPoint包含Application.Version方法來檢查在運行時使用的是哪個版本的PowerPoint,但它不包含可在編譯時使用#If ... #Then語句使用的等效編譯器常量。
在下面的例子中,If語句將拋出一個編譯錯誤在PowerPoint 2003因爲ObjectThemeColor方法(和msoThemeColorDark1恆定)不會在該版本VBA對象模型的存在的第二部分:
Option Explicit
Public Enum PPTversion
PPT2003 = 11
PPT2007 = 12
PPT2010 = 14
PPT2013 = 15
End Enum
Sub FillShape(oShp as Shape)
If Int(Application.Version) = 11 Then
' Use the old colour model
oShp.Fill.ForeColor.SchemeColor = ppForeground
Else
' Use the new colour model
' causes a compiler error "Method or data member not found" when run in 2003
oShp.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
End If
End Sub
有可能通過使用VBA7編譯常數(其有效檢測的PowerPoint 2010或以上),以獲得一部分的方式來解決,但是這留下2007下落不明:
Option Explicit
Public Enum PPTversion
PPT2003 = 11
PPT2007 = 12
PPT2010 = 14
PPT2013 = 15
End Enum
Sub FillShape(oShp as Shape)
If Int(Application.Version) = 11 Then
' Use the old colour model
oShp.Fill.ForeColor.SchemeColor = ppForeground
Else
' Use the new colour model
#If VBA7 Then
oShp.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
#End If
End If
End Sub
有沒有辦法實現的目標我嘗試着 沒有使用#Const機制,這意味着維護多個版本的項目?