2013-09-21 2 views
1

일부 작업을 수행하고 다시 솔루션을 제공하는 C++에서 ATL 라이브러리를 만드는 데 성공했습니다. 그래서 자동화 기능을 사용하여 모든 기능을 능가합니다. 이제는 모든 기능을 올바른 순서로 수행 할 수있는 매크로를 만들고 싶습니다. 버튼을 연결하면됩니다. 는 그래서이 매크로를 작성했습니다 :Excel의 vbasic 매크로에서 ATL 라이브러리 함수 사용

Sub Macro_test() 

Dim r As Integer 

r = setValInput(Range("F21"), Range("G21")) 
r = initializeCalculation() 
Range("C24") = r 
r = getResult("C21") 


End Sub 

내가이 엑셀 함수 setValInput이 확정되지 말합니다 구축합니다. ATL의 클래스는 OPclass로 명명되었는데, 아마도 이것으로 무엇인가해야합니까?

답변

3

CreateObject 메서드를 사용하여 개체를 만듭니다. 인수는 COM 클래스를 만들 때 C++ ATL 마법사에 제공 한 ProgID 값이거나 프로젝트 .RGS 파일에서 찾을 수 있습니다.

코드 스 니펫 : 구현 인터페이스를 통해 노출 된 ATL 클래스에

Set MyServer = CreateObject("ProgettoOPserver") 
    MyServer.setValInput(Range("F21"), Range("G21")) 

방법 및 특성을 당신의 VBA 스크립트 코드를 자동으로 사용할 수 있습니다.

다른 옵션은 먼저 외부 COM 서버 (ATL 기반 라이브러리)에 대한 참조를 추가하고 CreateObject 대신 New 연산자를 사용할 수 있습니다. 자세한 내용은 How to add a reference programmatically을 참조하십시오. 장점은 개체 브라우저에서 사용 가능한 메서드를 볼 수 있다는 것입니다.

+0

감사합니다. 나는 그것을, ProgID 'ProgettoOPserver'그래서 CreateObject ("ProgettoOPserver") 쓸 필요가 ?? 나는 그것을 시도했지만 기능이 명확하지 않다고 계속 말하고있다. 클래스 식별자가있는 함수를 작성해야합니까? 예제 Web.getResults? –

+0

코드 스 니펫을 업데이트합니다. 이 끝에서 그것은 잘 설정되어 있으며, ATL/C++ 구현에 대한 추가 질문이 있습니다. –

+0

아무런 문제없이 작동합니다. 고맙습니다. –

0

클래스 개체의 멤버 인 메서드를 클래스 개체의 인스턴스에서 호출해야합니다.

Dim op as New OPClass 
Debug.Print op.setValInput(Range("F21"),Range("G21")) 

이 다른 곳에서 로마의 대답은 당 개체를 만든 가정 : 이미 아마도 방법 setValInput을 포함 OPClass 모듈을 만든 것처럼, 뭔가를하려고합니다.

+0

감사. 나는 클래스의 이름으로 그것을하려고 애썼지 만 ProgID는 없다. –

+0

잠깐, 이해가 안되네, Dim OPCLASS로 선언 한 후 Roman에 의해 보여지는 것처럼 객체를 생성해야합니까? –

+0

글쎄, 클래스 객체가 무엇인지 잘 모르겠습니다. 그래서 말하기가 어렵습니다. 어쨌든 로마의 제안이 당신의 문제를 해결해 준 것처럼 보입니다, 환호! –

관련 문제