1

2007 년에 도입 된 색상 모델 변경과 관련하여 PowerPoint 2003 및 모든 최신 버전에서 사용할 수있는 단일 코드 모듈을 작성하려고합니다. 테마 대 VBA 개체 모델의 스키마) 개체 모델 변경으로 인해이 문제가 발생할 수 있습니다.PowerPoint 2003 및 2007/2010/2013 개체 모델 호환성을위한 조건부 VBA 코드

PowerPoint에는 런타임에 사용중인 PowerPoint 버전을 확인하는 데 Application.Version 메서드가 포함되어 있지만 컴파일 타임에 #If ... #Then 문과 함께 사용할 수있는 해당 컴파일러 상수는 포함되어 있지 않습니다. 아래의 예에서

의 ObjectThemeColor 방법 (및 msoThemeColorDark1 상수)가 VBA 개체 모델의 해당 버전에 존재하지 않기 때문에 파워 포인트 2003에서 컴파일러 오류가 발생합니다 If 문의 두 번째 부분 :

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 
무엇을 달성 할 수있는 방법이 있나요

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 

:

이 (효과적으로 위의 파워 포인트 2010을 감지)를 VBA7 컴파일러 상수를 사용하여 솔루션 방식의 일부를 취득하는 것이 가능하지만, 이것은 불명 2007 잎 노력하고있어 프로젝트의 여러 버전을 유지한다는 의미의 #Const 메커니즘을 사용하지 않고 할 수 있습니까?

답변

1

2007 이상에서/디버깅을 개발 한 후이를 변경이에

Sub FillShape(oShp as Shape) 

:

Sub FillShape(oShp as Object) 

을 컴파일러는 개체가 있거나없는 어떤 특성을 알고하지 않기 때문에 , 그것은 더 이상 당신에게 짖지 않을 것입니다. 물론 당신이 이해하지 못하거나 실수를 함정에 빠뜨리지 않으면 서 2003 년을 추진하려고하지 않는 것이 당신에게 달려 있습니다.