수색…


통사론

  • 옵션 optionName [값]
  • Option Explicit
  • 옵션 비교 {텍스트 | 이진 | 데이터 베이스}
  • 옵션 개인 모듈
  • 옵션베이스 {0 | 1}

매개 변수

선택권 세부 묘사
명백한 변수를 선언 한 모듈에서 변수 선언요구합니다 (이상적으로는 모두). 이 옵션을 지정하면 선언되지 않은 (/ 철자가 틀린) 변수를 사용하면 컴파일 오류가 발생합니다.
텍스트 비교 모듈의 문자열 비교가 시스템 로캘에 따라 대문자와 소문자를 구분하도록하여 알파벳 동등성 우선 순위를 지정합니다 (예 : "a"= "A").
바이너리 비교 기본 문자열 비교 모드. 모듈의 문자열 비교를 대 / 소문자를 구분하여 각 문자의 이진 표현 / 숫자 값 (예 : ASCII)을 사용하여 문자열을 비교합니다.
데이터베이스 비교 (MS-Access 전용) 모듈의 문자열 비교를 SQL 문과 같은 방식으로 수행합니다.
사설 모듈 모듈이 상주하는 프로젝트 외부에서 모듈의 Public 멤버에 액세스하지 못하게하여 호스트 응용 프로그램에서 프로 시저를 효과적으로 숨 깁니다 (즉, 매크로 또는 사용자 정의 함수로 사용할 수 없음).
옵션베이스 0 기본 설정. 모듈에서 암시 적 배열 하한을 0 으로 설정합니다. 배열이 명시적인 하위 경계 값없이 선언되면 0 이 사용됩니다.
옵션베이스 1 모듈에서 암시 적 배열 하한을 1 로 설정합니다. 명시적인 하위 경계 값없이 배열이 선언되면 1 이 사용됩니다.

비고

컴파일러가 Option Base {0|1} 선언을 되 돌리지 않고 명시 적으로 경계를 선언하여 배열의 경계를 제어하는 ​​것이 훨씬 쉽습니다. 이것은 이렇게 할 수 있습니다 :

Dim myStringsA(0 To 5) As String '// This has 6 elements (0 - 5)
Dim myStringsB(1 To 5) As String '// This has 5 elements (1 - 5)
Dim myStringsC(6 To 9) As String '// This has 3 elements (6 - 9)

Option Explicit

개발자가 사용하기 전에 모든 변수를 선언해야하므로 VBA에서 항상 Option Explicit 을 사용하는 것이 가장 좋습니다. 선언 된 변수 이름 및 IntelliSense에 대한 자동 대문자 사용과 같은 다른 이점도 있습니다.

Option Explicit

Sub OptionExplicit()
    Dim a As Integer
    a = 5
    b = 10 '// Causes compile error as 'b' is not declared
End Sub

VBE 도구에서 변수 선언 필요 설정하기 ► 옵션 ► 편집기 속성 페이지는 Option Explicit 문을 새로 생성 된 코드 시트의 맨 위에 놓습니다.

require_variable_declaration

이렇게하면 맞춤법 오류와 같은 실수를 코딩하지 않고 올바른 변수 유형을 변수 선언에 사용하는 데 영향을 미치지 않습니다. (더 많은 예제가 항상 "Option Explicit"을 사용할 때 주어진다.)

옵션 비교 {Binary | 텍스트 | 데이터 베이스}

옵션 비교 바이너리

이진 비교는 모듈 / 클래스 대 / 소문자를 구분 하는 문자열 짝수 검사를 모두 만듭니다. 기술적으로이 옵션을 사용하면 각 문자의 이진 표현의 정렬 순서를 사용하여 문자열 비교가 수행됩니다.

A <B <E <Z <a <b <e <z

모듈에 옵션 비교가 지정되지 않은 경우 기본적으로 이진이 사용됩니다.

Option Compare Binary

Sub CompareBinary()

    Dim foo As String
    Dim bar As String
    
    '// Case sensitive
    foo = "abc"
    bar = "ABC"
    
    Debug.Print (foo = bar) '// Prints "False"
    
    '// Still differentiates accented characters
    foo = "ábc"
    bar = "abc"
    
    Debug.Print (foo = bar) '// Prints "False"
    
    '// "b" (Chr 98) is greater than "a" (Chr 97)
    foo = "a"
    bar = "b"
    
    Debug.Print (bar > foo) '// Prints "True"
    
    '// "b" (Chr 98) is NOT greater than "á" (Chr 225)
    foo = "á"
    bar = "b"
    
    Debug.Print (bar > foo) '// Prints "False"

End Sub

옵션 비교 텍스트

Option Compare Text는 모듈 / 클래스 내의 모든 문자열 비교가 대소 문자를 구분하지 않는 비교를 사용하도록합니다.

(A | a) <(B | b) <(Z | z)

Option Compare Text

Sub CompareText()

    Dim foo As String
    Dim bar As String
    
    '// Case insensitivity
    foo = "abc"
    bar = "ABC"
    
    Debug.Print (foo = bar) '// Prints "True"
    
    '// Still differentiates accented characters
    foo = "ábc"
    bar = "abc"
    
    Debug.Print (foo = bar) '// Prints "False"
    
    '// "b" still comes after "a" or "á"
    foo = "á"
    bar = "b"
    
    Debug.Print (bar > foo) '// Prints "True"

End Sub

옵션 비교 데이터베이스

옵션 비교 데이터베이스는 MS Access에서만 사용할 수 있습니다. Text / Binary 모드 사용 여부를 결정하기 위해 현재 데이터베이스 설정을 사용하도록 모듈 / 클래스를 설정합니다.

주 : 모듈이 해당 데이터베이스의 SQL 조회와 동일한 f}으로 텍스트 비교를 처리해야하는 사용자 정의 액세스 UDF (사용자 정의 함수) 작성에 사용되지 않는 한이 설정의 사용은 권장되지 않습니다.

옵션베이스 {0 | 1}

Option Base배열 요소의 기본 하한을 선언하는 데 사용됩니다. 모듈 수준에서 선언되며 현재 모듈에 대해서만 유효합니다.

기본적으로 (따라서 옵션베이스가 지정되지 않은 경우)베이스는 0입니다. 즉, 모듈에서 선언 된 배열의 첫 번째 요소의 인덱스는 0입니다.

Option Base 1 이 지정되면 첫 번째 배열 요소의 인덱스는 1입니다.

기본 0의 예 :

Option Base 0

Sub BaseZero()

    Dim myStrings As Variant
    
    ' Create an array out of the Variant, having 3 fruits elements
    myStrings = Array("Apple", "Orange", "Peach")
    
    Debug.Print LBound(myStrings) ' This Prints "0"
    Debug.Print UBound(myStrings) ' This print "2", because we have 3 elements beginning at 0 -> 0,1,2
            
    For i = 0 To UBound(myStrings)
    
        Debug.Print myStrings(i) ' This will print "Apple", then "Orange", then "Peach"
    
    Next i

End Sub

베이스 1과 동일한 예

Option Base 1

Sub BaseOne()

    Dim myStrings As Variant
    
    ' Create an array out of the Variant, having 3 fruits elements
    myStrings = Array("Apple", "Orange", "Peach")
    
    Debug.Print LBound(myStrings) ' This Prints "1"
    Debug.Print UBound(myStrings) ' This print "3", because we have 3 elements beginning at 1 -> 1,2,3
            
    For i = 0 To UBound(myStrings)
    
        Debug.Print myStrings(i) ' This triggers an error 9 "Subscript out of range"
    
    Next i

End Sub

두 번째 예제는 배열의 인덱스 0에 대한 액세스 시도가 있었고 모듈이 Base 1 선언되었으므로이 인덱스가 존재하지 않으므로 첫 번째 루프 단계에서 범위를 벗어난 아래 첨자가 생성 되었습니다 (오류 9) .

기본 1의 올바른 코드는 다음과 같습니다.

    For i = 1 To UBound(myStrings)
    
        Debug.Print myStrings(i) ' This will print "Apple", then "Orange", then "Peach"
    
    Next i

Split 함수 Option Base 설정에 관계없이 항상 0부터 시작하는 요소 인덱스가있는 배열을 만듭니다. Split 함수를 사용하는 방법에 대한 예제는 여기 에서 찾을 수 있습니다.

스플릿 함수
지정된 부분 문자열을 포함하는 0부터 시작하는 1 차원 배열을 반환합니다.

Excel에서 다중 셀 범위의 Range.ValueRange.Formula 속성은 항상 1부터 시작하는 2D Variant 배열을 반환합니다.

마찬가지로 ADO에서 Recordset.GetRows 메서드는 항상 1부터 시작하는 2D 배열을 반환합니다.

권장되는 '권장 사항'중 하나는 항상 LBoundUBound 함수를 사용하여 배열의 범위를 결정하는 것입니다.

'for single dimensioned array
Debug.Print LBound(arr) & ":" & UBound(arr)
Dim i As Long
For i = LBound(arr) To UBound(arr)
    Debug.Print arr(i)
Next i

'for two dimensioned array
Debug.Print LBound(arr, 1) & ":" & UBound(arr, 1)
Debug.Print LBound(arr, 2) & ":" & UBound(arr, 2)
Dim i As long, j As Long
For i = LBound(arr, 1) To UBound(arr, 1)
    For j = LBound(arr, 2) To UBound(arr, 2)
         Debug.Print arr(i, j)
    Next j
Next i

Option Base 1 은 배열이 생성되거나 배열의 하위 경계가 1 인 배열을 일관성있게 작성하려는 경우 모든 코드 모듈의 맨 위에 있어야합니다.



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