엑셀 VBA에서 Private Declare 코드 64비트 시스템에서 사용할 수 없는 컴파일 오류 해결 방법


엑셀에서 VBA 프로그램을 작성할 때 외부 라이브러리를 참조해서 프로그램 코드를 작성할 때가 있습니다.

대표적으로 “kernel32.dll”이나 “shell32.dll” 등을 참조해서 좀 더 확장된 VBA 프로그램 코드를 작성하기도 합니다.

참조하는 라이브러리 이름에서 알 수 있듯이 “kernel32”, “shell32” 라이브러리는 모두 32비트 시스템을 위한 라이브러리 파일 입니다.
이러한 32비트 라이브러리를 64비트 시스템에서 그대로 사용하게 되면 오류가 발생하게 됩니다.

오류 내용은 아래와 같습니다.

컴파일 오류입니다. 이 프로젝트의 코드를 업데이트해야 64비트 시스템에서 사용할 수 있습니다. Declare 문을 검토하고 업데이트한 다음 PtrSafe 특성으로 표시하십시오.

엑셀 VBA에서 Private Declare 코드 64비트 시스템에서 사용할 수 없는 컴파일 오류 해결 방법


이번 글에서는 위와 같은 오류가 발생할 때 엑셀 VBA에서 Private Declare 코드 64비트 시스템에서 사용할 수 없는 컴파일 오류 해결 방법에 대해 알아보겠습니다.

VBA Private Declare 64비트 시스템에서 코드 컴파일 오류 해결 방법

일반적으로 VBA에서 참조 라이브러리를 선언할 때 Declare로 선언해서 사용하게 됩니다.

Private Declare Function ShellExecute Lib “shell32.dll”
Private Declare Sub Sleep Lib “kernel32.dll” (ByVal dwMilliseconds As Long)

이런 식으로 선언해서 사용합니다.

당연히 32비트 시스템에서는 오류가 발생하지 않지만 64비트 시스템에서는 컴파일 오류가 발생하게 됩니다.

컴파일 오류를 해결하기 위해 Declare 문에 PtrSafe 키워드를 추가해 주면 됩니다.

PtrSafe 키워드는 Declare 문이 64비트 시스템에서 사용해도 안전하다는 것을 표시합니다. 다르게 표현하면 해당 Declare 문이 명시적으로 64비트를 대상으로 한다는 것을 의미합니다.

Private Declare PtrSafe Function ShellExecute Lib “shell32.dll”
Private Declare PtrSafe Sub Sleep Lib “kernel32.dll” (ByVal dwMilliseconds As Long)

VBA에서 Function과 Sub의 차이점

VBA에서 Function과 Sub는 동일한 함수(프로시저) 개념을 가지고 있습니다. 차이점이라면 실행 후에 반환하는 리턴 값이 있는지 없는지의 차이입니다.

  • Function : 실행 후 리턴 되는 반환 값이 있습니다.
  • Sub : 별도의 반환 값이 프로시저 실행으로 끝납니다.

결론

요즘의 사용자 컴퓨터 환경은 대부분 64비트 시스템 환경입니다.
따라서 VBA에서 Declare 문을 사용할 경우 PtrSafe 키워드를 기본적으로 함께 사용하면 컴파일 오류 없이 VBA를 실행해서 사용할 수 있습니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기