如何使 VBA 代码与 64 位 Excel 兼容?
How to make VBA code compatible with 64-bit Excel?
我有一个 excel 运行 VB 代码,32 版本似乎没问题,现在我在 Office 2016 中测试时出现以下错误
The code in this project must be updated for use on 64-bit systems
因为我不擅长 vb 我在更新代码时遇到了问题。这是我下面的代码以及如何更新它以实现 64 位兼容性,
Declare Function GetSystemDirectory Lib "kernel64" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'a íÌÈ Ãí íßæä åäÇß ÌÏæá Úáì ÞÇÚÏÉ ÇáãÚáæãÇÊ ÈÅÓã
'a QtrDate
Global G_SystemPath As String
Function L_FileExist(L_FName As String) As Boolean
'a chick if the file given is found or not
'a input File Name
'a Output
'a True : if found
'a False : if not found
L_FileExist = Not (Trim(Dir(L_FName)) = "")
End Function
Public Function GetWindowsSysDir() As String
Dim strBuf As String
strBuf = Space$(250)
If GetSystemDirectory(strBuf, 250) Then
GetWindowsSysDir = StringFromBuffer(strBuf)
AddDirSep GetWindowsSysDir
End If
End Function
Public Function StringFromBuffer(Buffer As String) As String
Dim nPos As Long
nPos = InStr(Buffer, vbNullChar)
If nPos > 0 Then
StringFromBuffer = Left$(Buffer, nPos - 1)
Else
StringFromBuffer = Buffer
End If
End Function
Public Sub AddDirSep(strPathName As String)
strPathName = RTrim$(strPathName)
If Right$(strPathName, 1) <> "\" Then
strPathName = strPathName & "\"
End If
End Sub
Sub L_Secrit()
G_SystemPath = GetWindowsSysDir
If L_FileExist(G_SystemPath & "MSAYAR.DLL") Then
Sheet1.Cells(400, 2) = " "
Sheet1.Cells(401, 2) = " "
Sheet1.Cells(402, 2) = " "
第一行应该是
#if VBA7 then
Declare PtrSafe Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
#else
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
#end if
这里是 nice resource 查找 64 位 Win32API 调用。
我有一个 excel 运行 VB 代码,32 版本似乎没问题,现在我在 Office 2016 中测试时出现以下错误
The code in this project must be updated for use on 64-bit systems
因为我不擅长 vb 我在更新代码时遇到了问题。这是我下面的代码以及如何更新它以实现 64 位兼容性,
Declare Function GetSystemDirectory Lib "kernel64" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'a íÌÈ Ãí íßæä åäÇß ÌÏæá Úáì ÞÇÚÏÉ ÇáãÚáæãÇÊ ÈÅÓã
'a QtrDate
Global G_SystemPath As String
Function L_FileExist(L_FName As String) As Boolean
'a chick if the file given is found or not
'a input File Name
'a Output
'a True : if found
'a False : if not found
L_FileExist = Not (Trim(Dir(L_FName)) = "")
End Function
Public Function GetWindowsSysDir() As String
Dim strBuf As String
strBuf = Space$(250)
If GetSystemDirectory(strBuf, 250) Then
GetWindowsSysDir = StringFromBuffer(strBuf)
AddDirSep GetWindowsSysDir
End If
End Function
Public Function StringFromBuffer(Buffer As String) As String
Dim nPos As Long
nPos = InStr(Buffer, vbNullChar)
If nPos > 0 Then
StringFromBuffer = Left$(Buffer, nPos - 1)
Else
StringFromBuffer = Buffer
End If
End Function
Public Sub AddDirSep(strPathName As String)
strPathName = RTrim$(strPathName)
If Right$(strPathName, 1) <> "\" Then
strPathName = strPathName & "\"
End If
End Sub
Sub L_Secrit()
G_SystemPath = GetWindowsSysDir
If L_FileExist(G_SystemPath & "MSAYAR.DLL") Then
Sheet1.Cells(400, 2) = " "
Sheet1.Cells(401, 2) = " "
Sheet1.Cells(402, 2) = " "
第一行应该是
#if VBA7 then
Declare PtrSafe Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
#else
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
#end if
这里是 nice resource 查找 64 位 Win32API 调用。