수색…


통사론

  • 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 기능 NowTime 은 초 단위로 정확합니다.

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는 범위 / 범위 유형을 볼 수 있습니다. + 기호를 클릭하면 개체를 확장하고 개수 또는 열과 같은 속성을 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오.



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