2017-12-15 21 views
1

TLDR : VBA에서 스크립트를 작성하고 테스트하고 있지만 궁극적으로 기본 데스크톱 응용 프로그램에서 하나의 .bas 파일로 실행됩니다.activex dll/tlb 참조의 기본 스크립트에서 enums를 사용하는 방법

DLL을 참조 "개체"대신 .bas 파일에서 그 나라의 유형으로 응용 프로그램의 회원 유형을 정의하기 위해 나를 강제 bas에 VBA에서 손실됩니다.

기본 파일에서 참조를 정의하여 초기 바인딩에서 후기 바인딩 코드로 변환하지 않도록 할 수 있습니까?


상세 정보 : 나는 소프트웨어를 실행할 수있는 기본 스크립트에 VBA 스크립트를 변환해야합니다. 어쨌든 tlb 파일을 참조하는 기본 스크립트 내에 있습니까? set app = CreateObject("...")을 사용하여 응용 프로그램을 호출합니다. 예제에서는 VBA에서 인텔리 센스를 제공하지 않는 "객체"로 입력 된 모든 것을 보여줍니다.

enum을 해당 텍스트 값으로 다시 참조하지 않고도 참조 할 수 있습니까? 정수 값? 또한 기본 스크립트에서 object을 사용하는 대신 응용 프로그램 개체를 올바르게 입력하는 방법이 있습니까?

+1

열거 형입니다 텍스트가 아닌 값을 , 그들은 이름을 가진'Long' 정수이고, 이름은'String'이 아닌 식별자입니다. 너 뭐하려고? 당신은'app As Object'를 선언했기 때문에 인텔리 센스를 얻지 못합니다. 즉, 모든 멤버 호출이 런타임에 해결된다는 것을 의미합니다 (즉, 늦은 호출 임). 라이브러리를 참조하는 경우 런타임에 바인딩 된 코드를 작성할 필요가 없습니다. 'Set app = New ThatLibrary.WhateverThatIs' 그리고 당신은 Intellisense를 얻을 것입니다,'Dim app As ThatLibrary.WhateverThatIs'라고 가정하십시오. –

+0

도구> 참조 ...> .tlb 파일을 찾아보십시오. –

+0

@ Mat'sMug 나는 나의 질문을 명확히했다. 내가 refernce와 intellisense지고 VBA에서 쓰고 있지만 바스 스크립트 및 VBA 참조로 VBA 이동해야합니다. – GisMofx

답변

1

초기 파일에서 참조를 정의하여 초기 바인딩에서 후기 코드로 변환하지 않도록 할 수 있습니까?

아니요. .bas 파일에는 이러한 메타 데이터가 포함되어 있지 않습니다. 사실 보유하고있는 유일한 메타 데이터는 VBE가 모듈의 Name 속성을 채우는 데 사용하는 숨겨진 VB_Name 속성으로 저장되는 모듈의 이름입니다.

참조는 VBProject 개체에 속합니다. .bas 파일을 자체적으로 서서 VBScript 런타임을 통해 VBE 외부에서 실행 가능하게하려면 이어야합니다. 초기 바인딩 코드를 런타임에 변환해야합니다.

후기 바인딩 라이브러리에 정의 된 모든 유형이 이제 Object으로 선언되어야하고 열거 형 값이 기본 정수 값으로 변환되어야하므로 이는 인텔리 센스를 잃는 것을 의미합니다.

은 또는 당신이 열거 형에 대한 이름이 같은 상수를 정의하고 이름을 유지할 수 있습니다 :

Private Const SomeEnumValue As Long = 42 

또는 [재] 열거 형을 직접 정의 :

Private Enum SoneEnum 
    SomeEnumValue = 42 
    '... 
End Enum