다른 사용자가 사용할 매크로를 개발할 때 사용자가 매크로가 끝나기 전에 종료하고 매크로가 수행하는 작업을 계속 제어 할 수있는 메서드를 추가 할 수 있습니다. Ctrl + Break는 매크로를 중지하지만 사용자가 VBA 편집기에서 코드를 볼 수 있도록 허용하므로 정상적으로 종료되지는 않습니다.

이 문제에 접근 할 수있는 몇 가지 방법이 있습니다. 첫 번째는 매크로에 “종료 하시겠습니까?”프롬프트를 작성한 다음 매크로가 주기적으로 프롬프트를 표시하도록하는 것입니다. 예를 들어, 다음 코드를 고려하십시오.

Do ...



'    your code goes here

Counter = Counter + 1     If Counter Mod 25 = 0 Then         If MsgBox("Stop Macro?", vbYesNo) = vbYes Then End     End If Loop

매크로 구성은 Do …​ Loop 구조를 사용하여 반복해서 반복하려는 일련의 단계가 있다는 전제를 기반으로합니다. 루프를 통과 할 때마다 Counter의 값이 증가합니다. 루프를 통해 25 회마다 “중지 매크로?” 프롬프트가 표시되고 사용자가 종료 할 수 있습니다.

이 접근 방식은 구현하기 쉬우 며 일부 목적에 적합 할 수 있습니다. 그러나이 접근 방식의 가장 큰 단점은 즉각 성을 허용하지 않는다는 것입니다. 사용자는 최소 25 번의 반복이 발생할 때까지 매크로를 종료 할 때까지 기다려야합니다.

또 다른 방법은 VBA 코드를 “숨기고”암호를 적용하는 것입니다.

VBA 편집기 내에서 다음 단계를 수행하면됩니다.

  1. 도구 메뉴에서 VBAProject 속성 옵션을 선택하십시오. 편집기는 프로젝트 속성 대화 상자를 표시합니다.

  2. 보호 탭이 표시되는지 확인합니다. (그림 1 참조)

  3. 보기를 위해 프로젝트 잠금 확인란을 선택합니다.

  4. 암호 상자에 매크로를 보호하는 데 사용할 암호를 입력합니다.

  5. 암호 확인 상자에 동일한 암호를 두 번 입력합니다.

  6. 확인을 클릭하십시오.

VBA 편집기를 닫은 다음 통합 문서를 저장하십시오. VBA 프로젝트가 보호 된 상태에서 사용자는 여전히 Ctrl + Break를 클릭하여 매크로를 중지 할 수 있지만 실제 프로그램 코드를 얻을 수는 없습니다. 그들은 코드를 보호하는 계속 또는 종료 버튼에서만 선택할 수 있습니다. 추가 이점으로이 접근 방식은 사용자가 메뉴, 도구 모음 또는 리본 선택 항목을 사용하여 코드를 볼 수 없도록 제한합니다.

그러나 가장 좋은 방법은 사용자가 Esc 또는 Ctrl + Break를 누를 때마다 기본적으로 담당하는 오류 처리기를 만드는 것입니다. 실행되는 처리기는 사용자에게 정말로 종료 할 것인지 묻고 종료 할 경우 정상적으로 종료 할 수 있습니다. 이 작업이 수행되는 방법을 보여주는 몇 가지 예제 코드는 다음과 같습니다.

Sub Looptest()

Application.EnableCancelKey = xlErrorHandler     On Error GoTo ErrHandler

Dim x As Long     Dim y As Long     Dim lContinue As Long

y = 100000000     For x = 1 To y Step 1     Next

Application.EnableCancelKey = xlInterrupt     Exit Sub

ErrHandler:

If Err.Number = 18 Then         lContinue = MsgBox(prompt:=Format(x / y, "0.0%") & _           " complete" & vbCrLf & _           "Do you want to Continue (YES)?" & vbCrLf & _           "Do you want to QUIT? [Click NO]", _           Buttons:=vbYesNo)

If lContinue = vbYes Then             Resume         Else             Application.EnableCancelKey = xlInterrupt             MsgBox ("Program ended at your request")

Exit Sub         End If     End If

Application.EnableCancelKey = xlInterrupt End Sub

이 예제에서는 EnableCancelKey 메서드를 사용하여 취소 키 (Esc 또는 Ctrl + Break)를 누를 때 이동해야하는 레이블의 이름을 할당합니다. 이 경우 ErrHandler가 점프되고 사용자에게 무엇을해야하는지 묻습니다. 사용자가 종료를 선택하면 매크로가 정상적으로 종료됩니다.

ErrHandler 레이블 이후에 수행되는 첫 번째 작업은 Err 개체의 Number 속성이 18과 같은지 확인하는 것입니다.이 경우 취소 키를 눌렀 음을 알 수 있습니다. 그렇지 않은 경우 다른 유형의 오류가 발생한 것이므로 매크로에 적합한 방식으로 처리해야합니다.

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (3021)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다. 여기에서 Excel (Excel 2007 이상)의 리본 인터페이스에 대한이 팁 버전을 찾을 수 있습니다.

link : / excelribbon-Aborting_a_Macro_and_Retaining_Control [매크로 중단 및 제어 유지].