수색…
통사론
- 옵션 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 문을 새로 생성 된 코드 시트의 맨 위에 놓습니다.
이렇게하면 맞춤법 오류와 같은 실수를 코딩하지 않고 올바른 변수 유형을 변수 선언에 사용하는 데 영향을 미치지 않습니다. (더 많은 예제가 항상 "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.Value
및 Range.Formula
속성은 항상 1부터 시작하는 2D Variant 배열을 반환합니다.
마찬가지로 ADO에서 Recordset.GetRows
메서드는 항상 1부터 시작하는 2D 배열을 반환합니다.
권장되는 '권장 사항'중 하나는 항상 LBound 및 UBound 함수를 사용하여 배열의 범위를 결정하는 것입니다.
'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 인 배열을 일관성있게 작성하려는 경우 모든 코드 모듈의 맨 위에 있어야합니다.