VBA_ Convert from 32bit to 64bit VBA7, Win64, PtrSafe, LongPtr


https://docs.microsoft.com/en-us/office/vba/language/concepts/getting-started/64-bit-visual-basic-for-applications-overview

엑셀 2016버전 이전에 작성된 VBA CODE를 재사용 하려다보면 32bit로 작성되어 64bit 엑셀에서는 일부 오류가 발생합니다.

일단 가장 먼저 해볼 수 있는 것은 위 MS문서에 따라서 64bit 사용에 따른 문구수정입니다.

최근 엑셀은 VBA7로 간주하고 작업하면 무리가 없습니다.VBA6버전은 한참 오래 전 버전입니다.

#If VBA7 Then 로 표현되는 64bit 구문에서는 상황에 따라 Declare PtrSafe로 PtrSafe 단어를 추가하고 Long >> LongPtr로 변환해 주는 작업을 해야 합니다. 이는 코드를 보고 판별해야 해서 항상 정해진 규칙이 있는 것이 아닙니다.

VBA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#if VBA7 then 
' Code is running in the new VBA7 editor
#if Win64 then
' Code is running in 64-bit version of Microsoft Office
#else
' Code is running in 32-bit version of Microsoft Office
#end if
#else
' Code is running in VBA version 6 or earlier
#end if


#If VBA7 Then
Declare PtrSafe Sub...
#Else
Declare Sub...
#EndIf



예를 들어보면 기존에는 1줄로 작성된 부분이 있다고 가정합니다.

코드는 아래 줄입니다.

Private Declare Function GetCurrentProceessID ….

이 부분을 VBA7일 때와 아닐 때로 구분하여 #If / #Else 문구로 구분작성을 해주는 것입니다.

2023-08-13T203005


2023-08-13T203027







Comments

You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.