증상
다음과 같은 경우를 생각해볼 수 있습니다.
Declare 문을 사용하는 Microsoft VBA(Visual Basic for Applications) 매크로 코드를 작성합니다.
VBA 매크로 코드는 컴파일 상수로 사용됩니다. 예를 들어 매크로 코드는 다음 컴파일 상수 중 하나를 사용합니다.
- VBA7 #If
- #If Win64
조건부 블록에서 #Else 블록을 사용합니다. #Else 블록에서는 Microsoft Visual Basic for Applications 6.0에서 실행되도록 설계된 Declare 문에 구문을 사용합니다.
Microsoft Office 2010 프로그램의 64비트 버전에서 코드를 편집합니다.
#Else 블록에서 Declare 문을 변경하려고 합니다.
이 경우 다음과 유사한 내용의 오류 메시지가 나타납니다.
Microsoft Visual Basic for Applications
Compile error:
The code in this project must be updated for use on 64-bit
systems. Please review and update Declare statements and then
mark them with the PtrSafe attribute.
참고
이 문제는 VBA 매크로를 편집할 때만 발생합니다. 매크로를 실행할 때는 이 문제가 발생하지 않습니다.
해결 방법
이 문제를 해결하려면 "컴파일 오류"를 무시하고 64비트 버전의 Office 2010 프로그램에서 VBA 코드를 실행합니다.
추가 정보
문제를 재현하는 방법
Microsoft는 특정 목적에 대한 상업성 및/또는 적합성에 대한 암시적 보증을 포함하되 이에 국한되지 않는 명시적 또는 묵시적 보증 없이 실례에 대한 프로그래밍 예제를 제공합니다. 이 문서의 내용은 프로시저를 작성하고 디버깅하는 데 사용되는 도구 및 여기에서 설명하는 프로그래밍 언어에 익숙한 사용자를 대상으로 합니다. Microsoft 지원 엔지니어는 사용자에게 도움이 되도록 특정 프로시저에 대한 기능을 설명할 수 있지만 사용자의 특정 요구 사항에 맞도록 예제를 수정하여 추가 기능을 제공하거나 프로시저를 구성하지는 않습니다.
사용 가능한 지원 옵션 및 Microsoft에 문의하는 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 방문하세요.
https://support.microsoft.com/contactus
Windows 64비트 운영 체제에서 실행되는 64비트 버전의 Microsoft Excel 2010 시작합니다.
참고
기본적으로 새 통합 문서가 열립니다.
Alt+F11을 눌러 Visual Basic for Applications 7.0 IDE 창을 시작합니다.
삽입 메뉴에서 모듈을 클릭합니다.
표시되는 코드 창에서 다음 코드를 복사하여 붙여넣습니다.
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms as Long) #End If
각 Declare 문에서 "ms"에서 "밀리초"로 전달되는 매개 변수의 이름을 수동으로 변경합니다.
두 번째 Declare 문을 변경하면 Visual Basic for Applications 7.0은 PtrSafe를 사용해야 했음을 나타내는 오류를 보고합니다. 그러나 줄이 Visual Basic for Applications 6.0에서만 실행되는 섹션에 있으므로 보고서가 잘못되었습니다. VBA 6.0은 PtrSafe를 사용하지 않습니다. 따라서 오류 메시지를 무시해도 됩니다.