수색…


컴파일시 코드 동작 변경

#Const 지시어는 사용자 정의 전처리 상수를 정의하는 데 사용됩니다. 이것들은 나중에 컴파일되고 실행될 코드 블록을 제어하기 위해 #If 사용됩니다.

#Const DEBUGMODE = 1

#If DEBUGMODE Then
    Const filepath As String = "C:\Users\UserName\Path\To\File.txt"
#Else
    Const filepath As String = "\\server\share\path\to\file.txt"
#End If

결과적으로 filepath 값은 "C:\Users\UserName\Path\To\File.txt" 됩니다. #Const 줄을 제거하거나 #Const DEBUGMODE = 0 변경하면 filepath"\\server\share\path\to\file.txt" 됩니다.

#Const Scope

#Const 지시문은 단일 코드 파일 (모듈 또는 클래스)에만 유효합니다. 각각 신고해야하고 모든 당신이 당신의 사용자 정의 상수를 사용하고자하는 파일. 또는, 당신은 선언 할 수 #Const 도구 >> [당신의 프로젝트 이름] 프로젝트 속성으로 이동하여 프로젝트에 대해 전역. 그러면 상수 선언을 입력 할 프로젝트 속성 대화 상자가 나타납니다. "조건부 컴파일 인수"상자에 [constName] = [value] 합니다. [constName1] = [value1] : [constName2] = [value2] 와 같이 콜론으로 구분하여 둘 이상의 상수를 입력 할 수 있습니다.

VBA 프로젝트 속성 대화 상자

미리 정의 된 상수

일부 컴파일 상수는 이미 사전 정의되어 있습니다. 어떤 버전이 존재하는지는 VBA를 실행중인 Office 버전의 bitness에 따라 달라집니다. Vba7은 Office 2010과 함께 도입되어 64 비트 버전의 Office를 지원합니다.

일정한 16 비트 32 비트 64 비트
Vba6 그릇된 Vba6 그릇된
Vba7 그릇된 Vba7 참된
Win16 참된 그릇된 그릇된
Win32 그릇된 참된 참된
Win64 그릇된 그릇된 참된
그릇된 Mac의 경우 Mac의 경우

Win64 / Win32는 Windows 버전이 아니라 Office 버전을 나타냅니다. 예를 들어 OS가 64 비트 버전의 Windows 인 경우에도 32 비트 Office에서 Win32 = TRUE입니다.

모든 버전의 Office에서 작동하는 Import Declare 사용

#If Vba7 Then
    ' It's important to check for Win64 first, 
    ' because Win32 will also return true when Win64 does.

    #If Win64 Then
        Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
    #Else
        Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
    #End If
#Else 
    ' Must be Vba6, the PtrSafe keyword didn't exist back then,
    ' so we need to declare Win32 imports a bit differently than above.

    #If Win32 Then
        Declare Function GetFoo Lib "exampleLib32"() As Long
    #Else
        Declare Function GetFoo Lib "exampleLib"() As Integer
    #End If
#End If

지원해야하는 Office 버전에 따라 조금 더 간단해질 수 있습니다. 예를 들어 많은 사람들이 여전히 16 비트 버전의 Office를 지원하고 있습니다. 16 비트 사무실의 마지막 버전은 1994 년에 출시 된 4.3 버전 이었으므로 Office 2007을 포함한 거의 모든 최신 사례에서 다음 선언만으로도 충분합니다.

#If Vba7 Then
    ' It's important to check for Win64 first, 
    ' because Win32 will also return true when Win64 does.

    #If Win64 Then
        Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
    #Else
        Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
    #End If
#Else 
    ' Must be Vba6. We don't support 16 bit office, so must be Win32. 

    Declare Function GetFoo Lib "exampleLib32"() As Long
#End If

Office 2010 이전 버전을 지원할 필요가없는 경우이 선언은 올바르게 작동합니다.

' We only have 2010 installs, so we already know we have Vba7.

#If Win64 Then
    Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
#Else
    Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
#End If


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow