2017-10-26 2 views
2

PPT 2010 및 2013-2016에서 모두 작동하는 PPT 매크로를 작성하려고합니다. 사용할 2010 모델에없는 2013-16 개체 모델 (ActivateChartDataWindow)의 개체가 하나 있습니다. 나는 응용 프로그램 버전을 테스트하기 위해 다음과 같은 코드를 사용하여 생각하고 올바른 개체를 사용 : 문제는 .ActivateChartDataWindow 개체가 발견되지 않기 때문에이 2010 년에 컴파일되지 않습니다이다개체 모델에 대한 VBA 테스트

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

. 따라서 런타임 오류는 발생하지 않지만 컴파일 타임 오류가 발생합니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 코드 자체에서 컴파일 타임 검사를 비활성화하는 방법이 있습니까?

답변

2

귀하는 초기 회원 전화를하고 있습니다. 코드에 이전 버전의 형식 라이브러리를 사용하여 컴파일 할 수없는 멤버 호출이 포함되어있는 경우 솔루션은 런타임에 바인딩되는 런타임에 바인딩 된 호출로 전환하는 것입니다 (즉, 컴파일 타임 유효성 검사 없음).

그래서 대신 With theChart.ChartData, 당신은 Object 변수를 선언하고 Set 그것을 theChart.ChartData에 :

Dim lateBoundChartData As Object 
Set lateBoundChartData = theChart.ChartData 

그리고 지금 lateBoundChartData에 의해 만들어진 모든 구성원 호출은 런타임에 확인됩니다 - 오타 조심 Option Explicit 여기에서 당신을 도울 수 없다! 당신이 Object에 대해 쓰기 아무것도 항상 런타임에 바인딩 될 것입니다 :

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 

재미있는 것은 사람들이 심지어 실현하지 않고, 런타임에 바인딩 코드 모든 시간을 쓰기 때문이다.

+0

멋진 아이디어와 작품 .. 감사합니다! – dashnick