비주얼베이직 런타임 오류 발생 시 디버깅 및 코드 수정 해결 방법

비주얼베이직 런타임 오류 발생 시 디버깅 및 코드 수정 해결 방법

프로그램을 만들다 보면 비주얼베이직 런타임 오류를 만날 때가 많습니다. 실행 중 갑자기 멈추거나 이상하게 동작하면 당황스러운데요, 이럴 때 어떻게 하면 문제를 쉽고 빠르게 잡을 수 있을까요? 이번 글에서는 VB와 VBA에서 자주 마주치는 런타임 오류의 원인부터 Visual Studio와 엑셀 VBA 에디터를 활용한 디버깅, 그리고 코드 수정 방법까지 단계별로 알려드리겠습니다.

런타임 오류는 왜 자꾸 발생할까요?

런타임 오류는 간단히 말해 프로그램이 실행되는 도중에 나타나는 오류입니다. 코드는 컴파일에서 아무 문제 없었는데 실행 중 파일이 없거나, 데이터 형식이 안 맞거나, 배열 범위를 벗어난 경우 등이 대표적이죠. 특히 비주얼베이직에서는 이런 오류가 꽤 자주 발생합니다. 사용자가 프로그램을 쓸 때 불편함 없이 진행하려면 이 오류를 적절히 처리해야 하는데, 그 시작은 오류가 난 위치를 정확하게 아는 것입니다.

VBA에서 런타임 오류는 어떻게 잡을 수 있을까요?

엑셀 VBA 환경이라면 ALT + F11을 눌러 Visual Basic Editor를 열 수 있습니다. 여기서 가장 기본인 On Error 문을 활용할 수 있는데요, 상황에 따라 다음과 같이 사용합니다.

  • On Error Resume Next: 오류가 나더라도 바로 다음 줄로 넘어가는 방법입니다. 간단히 오류를 무시하고 싶을 때 유용하지만, 숨겨진 문제를 발견하기 어려울 수 있어 조심해야 하죠.
  • On Error GoTo 라벨: 오류 발생 시 지정한 라벨의 코드로 이동해 처리합니다. 오류마다 다른 대처가 필요할 때 쓰기 좋습니다.
  • On Error GoTo 0: 오류 처리기를 끄고, 오류 발생 시 바로 멈추도록 원래 상태로 복원합니다.

예를 들어, 파일을 열 때 오류가 나면 메시지를 보여주고 계속 진행하는 코드는 아래와 같습니다.

Sub TestFile()
On Error GoTo ErrorHandler
Open “C:\test.txt” For Input As #1
Do While Not EOF(1)
‘ 파일 처리 코드
Loop
Close #1
Exit Sub
ErrorHandler:
MsgBox “파일 열기 실패: ” & Err.Description
Resume Next
End Sub

이렇게 하면 오류 메시지가 뜨고 난 뒤에도 프로그램이 중단되지 않고 부드럽게 동작하게 됩니다.

Visual Studio에서 비주얼베이직 런타임 오류, 어떻게 디버깅할까요?

Visual Studio를 이용하는 경우, F5 키로 디버그 모드에 진입하면 런타임 오류가 뜰 때 어디 문제가 있는지 노란 줄로 친절히 알려줍니다. 변수 값을 확인하려면 마우스를 변수 위에 올리거나 Locals 창을 활용하세요. 수정이 필요할 땐 ‘편집하며 계속하기(Edit and Continue)’ 기능도 이용할 수 있습니다.

단계 방법 단축키
1. 브레이크 설정 오류 의심되는 코드 라인 클릭 F9
2. 코드 수정 디버깅 중 직접 편집
3. 변경 적용 Debug 메뉴에서 코드 변경 적용 선택 Alt+F10
4. 계속 실행 F5로 디버깅 계속 F5

주의할 점은 호출 스택을 바꾸거나 한 번에 많은 메모리를 추가하는 경우엔 즉시 적용이 안 됩니다. 그럴 땐 ‘다음 문 설정(Set Next Statement, Ctrl+Shift+F10)’을 써서 코드의 위치를 직접 바꿔주는 방법이 있습니다.

런타임 오류를 더 세밀히 관리하는 고급 방법은?

프로젝트가 커지면 런타임 오류가 반복될 수 있는데, 이때는 사용자 정의 오류 보고 함수를 만들어 사용하는 것도 좋습니다. 예를 들면, _CrtDbgReportW 함수 스타일로 재진입을 막는 락을 걸고, 메시지 박스를 띄워 사용자에게 선택권을 주는 방식입니다. 이렇게 하면 오류가 나도 프로그램이 멈추지 않고 상황에 따라 대처할 수 있습니다.

int MyErrorHandler(int err, const wchar_t* file, int line, …){
  // 재진입 방지
  static long lock = 0;
  while(InterlockedExchange(&lock, 1)) Sleep(0);

  // 오류 메시지 띄우기
  wchar_t msg[256];
  swprintf_s(msg, L”오류: %d 줄 %d\n파일: %s”, err, line, file);
  int choice = MessageBox(NULL, msg, L”오류!”, MB_YESNO);

  lock = 0;
  return choice == IDYES ? 1 : 0;
}

이런 식으로 오류를 잘 통제하면 실행 중 급작스런 중단을 막고 안정성을 높일 수 있어 권장합니다.

엑셀 VBA 현실적인 코드 수정 방법은 무엇일까요?

VBA에서 매크로가 자주 오류 난다면, 먼저 ALT + F11로 Visual Basic Editor를 열어보세요. 그리고 다음 단계를 따라 진행해 보시기 바랍니다.

  1. 모듈을 더블클릭해 코드를 열고 수정합니다.
  2. Debug 메뉴에서 ‘Compile VBAProject’를 선택해 문법 오류를 찾습니다.
  3. F8 키를 눌러 한 줄씩 코드를 실행하면서 어디서 문제가 생기는지 확인합니다.
  4. 수정이 끝나면 저장 후 F5로 실행해봅니다.

여기서 주의할 점! 특히 런타임 1004 오류가 자주 보인다면 매크로 보안 설정도 꼭 확인하세요. 파일 > 옵션 > Trust Center > 매크로 설정 > 모든 매크로 활성화로 바꿔야 합니다.

요즘은 VS Code와 같은 현대적인 편집기도 가능합니다. ‘XVBA’ 확장 프로그램을 설치하고 엑셀 파일을 열어 코드를 수정한 뒤 Export해서 실행하는 방법인데요, 무척 가볍고 편리한 도구이니 한번 써보시는 걸 권해드립니다.

Visual Studio에서 빠르게 코드 고치는 방법은?

Visual Studio 사용 시 코드에 경고 물결선(언더라인)이 생겼다면 Ctrl + 마침표(.)를 눌러보세요. 자동 수정 전구 아이콘이 뜨면서 변수명 변경이나 null 체크 추가 등이 손쉽게 진행됩니다. 덕분에 코딩할 때 작은 실수를 미리 보고 고칠 수 있어 시간 절약에 큰 도움이 됩니다.

자주 묻는 질문

디버깅 중 코드 수정이 안 될 때는 어떻게 하나요?

Alt+F10 대신 Ctrl+Shift+F10을 써보세요.

VBA 런타임 1004 오류는 어떻게 해결하나요?

매크로 보안 낮추고 파일 경로 다시 확인하세요.

컴파일 오류와 런타임 오류 구분법은 무엇인가요?

컴파일은 실행 전 오류, 런타임은 실행 중 나요.

비주얼베이직 런타임 오류는 당황스러울 수 있지만, 차근차근 원인을 찾아가면서 이번 글에서 소개한 디버깅 방법과 코드 수정 절차를 따르면 대부분 쉽게 해결할 수 있습니다. 직접 해보니 오류 해결 시간도 크게 줄었고, 프로그램 안정성이 확실히 올라갔어요. 꼭 활용해 보시고 궁금한 점 있으면 언제든지 질문해 주세요!

댓글 남기기