수색…
통사론
- Debug.Print (string)
- 중지 () / 중지
Debug.Print
직접 실행 창에 오류 코드 설명 목록을 인쇄하려면 Debug.Print
함수에 전달하십시오.
Private Sub ListErrCodes()
Debug.Print "List Error Code Descriptions"
For i = 0 To 65535
e = Error(i)
If e <> "Application-defined or object-defined error" Then Debug.Print i & ": " & e
Next i
End Sub
직접 실행 창을 다음과 같이 표시 할 수 있습니다.
- | V의 iew 선택 나는 메뉴 바에서 muitly Window
- 단축키 Ctrl-G 사용하기
중지
Stop 명령은 호출 될 때 실행을 일시 정지합니다. 거기에서 프로세스를 다시 시작하거나 단계별로 실행할 수 있습니다.
Sub Test()
Dim TestVar as String
TestVar = "Hello World"
Stop 'Sub will be executed to this point and then wait for the user
MsgBox TestVar
End Sub
직접 실행 창
전체 하위를 실행하지 않고 매크로 코드 줄을 테스트하려면 직접 실행 창에 직접 명령을 ENTER
하고 ENTER
를 눌러 실행하십시오.
행의 출력을 테스트하기 위해 선 앞에 물음표를 붙이면 ?
직접 실행 창에 직접 인쇄 할 수 있습니다. 또는 print
명령을 사용하여 print
할 수도 있습니다.
Visual Basic Editor에서 CTRL + G
를 눌러 직접 실행 창을 엽니 다. 현재 선택한 시트의 이름을 "ExampleSheet"로 바꾸려면 직접 실행 창에 다음을 입력하고 ENTER
ActiveSheet.Name = "ExampleSheet"
직접 선택한 창에서 직접 현재 선택된 시트의 이름을 인쇄하려면
? ActiveSheet.Name
ExampleSheet
이 메소드는 코드에서 구현하기 전에 내장 함수 또는 사용자 정의 함수의 기능을 테스트하는 데 매우 유용 할 수 있습니다. 아래 예제에서는 직접 실행 창을 사용하여 함수 또는 일련의 함수의 출력을 테스트하여 예상 된 내용을 확인하는 방법을 보여줍니다.
'In this example, the Immediate Window was used to confirm that a series of Left and Right
'string methods would return the desired string
'expected output: "value"
print Left(Right("1111value1111",9),5) ' <---- written code here, ENTER pressed
value ' <---- output
직접 실행 창은 응용 프로그램, 통합 문서 또는 기타 필요한 속성을 설정하거나 다시 설정하는데도 사용할 수 있습니다. 예기치 않게 오류가 발생하여 값을 True
재설정하지 않고 종료하게하는 서브 루틴에서 Application.EnableEvents = False
를 사용하면 유용 할 수 있습니다 (좌절감과 예기치 않은 기능을 유발할 수 있습니다.이 경우 명령을 직접 입력 할 수 있습니다 직접 실행 창에 넣고 실행하십시오.
? Application.EnableEvents ' <---- Testing the current state of "EnableEvents"
False ' <---- Output
Application.EnableEvents = True ' <---- Resetting the property value to True
? Application.EnableEvents ' <---- Testing the current state of "EnableEvents"
True ' <---- Output
고급 디버깅 기술의 경우 콜론 :
은 줄 구분 기호로 사용할 수 있습니다. 이것은 아래 예제에서 루핑과 같은 여러 줄 표현식에 사용할 수 있습니다.
x = Split("a,b,c",","): For i = LBound(x,1) to UBound(x,1): Debug.Print x(i): Next i '<----Input this and press enter
a '<----Output
b '<----Output
c '<----Output
타이머를 사용하여 성능 병목 현상 찾기
속도를 최적화하는 첫 번째 단계는 코드의 가장 느린 부분을 찾는 것입니다. Timer
VBA 함수는 Windows 기반 PC에서 1/126 초 (3.90625 밀리 초)의 정밀도로 자정 이후 경과 된 시간 (초)을 반환합니다. VBA 기능 Now
및 Time
은 초 단위로 정확합니다.
Dim start As Double ' Timer returns Single, but converting to Double to avoid
start = Timer ' scientific notation like 3.90625E-03 in the Immediate window
' ... part of the code
Debug.Print Timer - start; "seconds in part 1"
start = Timer
' ... another part of the code
Debug.Print Timer - start; "seconds in part 2"
코드에 중단 점 추가
실행을 중지 할 VBA 코드의 줄 왼쪽에있는 회색 열을 클릭하면 코드에 중단 점을 쉽게 추가 할 수 있습니다. 빨간색 점이 열에 나타나고 중단 점 코드도 빨간색으로 강조 표시됩니다.
코드 전체에 여러 개의 중단 점을 추가하고 메뉴 모음에서 "재생"아이콘을 눌러 실행을 다시 시작할 수 있습니다. 모든 코드가 변수 정의 행으로 중단 점이 될 수있는 것은 아니며 프로 시저의 첫 번째 또는 마지막 행과 주석 행은 중단 점으로 선택할 수 없습니다.
디버거 지역 창
지역 창을 사용하면 현재 실행중인 함수 또는 서브 루틴 범위 내의 변수 및 객체의 현재 값에 쉽게 액세스 할 수 있습니다. 문제를 찾기 위해 코드를 디버깅하고 변경 사항을 단계별 실행하는 데 필수적인 도구입니다. 또한 존재하지 않았던 속성을 탐색 할 수 있습니다.
다음 예제를 보자.
Option Explicit
Sub LocalsWindowExample()
Dim findMeInLocals As Integer
Dim findMEInLocals2 As Range
findMeInLocals = 1
Set findMEInLocals2 = ActiveWorkbook.Sheets(1).Range("A1")
End Sub
VBA 편집기에서보기 -> 지역 창을 클릭하십시오.
그런 다음 서브 루틴 내부를 클릭 한 후 F8을 사용하여 코드를 실행하면 findMeinLocals를 할당하기 전에 중지되었습니다. 아래에서 값이 0임을 알 수 있습니다.이 값을 지정하지 않으면이 값이 사용됩니다. 범위 개체가 'Nothing'입니다.
서브 루틴이 끝나기 직전에 중지하면 변수의 최종 값을 볼 수 있습니다.
findMeInLocals는 값 1과 Integer 유형을, FindMeInLocals2는 범위 / 범위 유형을 볼 수 있습니다. + 기호를 클릭하면 개체를 확장하고 개수 또는 열과 같은 속성을 볼 수 있습니다.