确保你的VBA代码是64位兼容的

我的Mircosoft Office 2010是x86,但是当我尝试运行oe VBA时,出现一个与x64不兼容的错误。

我有这个代码:

Private Declare Function SHFileOperation Lib "shell32.dll" Alias _ "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long Private Declare Function PathIsNetworkPath Lib "shlwapi.dll" _ Alias "PathIsNetworkPathA" ( _ ByVal pszPath As String) As Long Private Declare Function GetSystemDirectory Lib "kernel32" _ Alias "GetSystemDirectoryA" ( _ ByVal lpBuffer As String, _ ByVal nSize As Long) As Long Private Declare Function SHEmptyRecycleBin _ Lib "shell32" Alias "SHEmptyRecycleBinA" _ (ByVal hwnd As Long, _ ByVal pszRootPath As String, _ ByVal dwFlags As Long) As Long Private Const FO_DELETE = &H3 Private Const FOF_ALLOWUNDO = &H40 Private Const FOF_NOCONFIRMATION = &H10 Private Const MAX_PATH As Long = 260 Private Type SHFILEOPSTRUCT hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Boolean hNameMappings As Long lpszProgressTitle As String End Type '''''''''''''''''''''''''''''''''''''' ' Download API function. '''''''''''''''''''''''''''''''''''''' Private Declare Function URLDownloadToFile Lib "urlmon" Alias _ "URLDownloadToFileA" ( _ ByVal pCaller As Long, _ ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As Long, _ ByVal lpfnCB As Long) As Long 

我试着将每个私有声明函数改为私有声明PtrSafe函数

但是当我尝试加载代码时,我的Excel变得没有反应。

anyoe知道解决scheme吗?

谢谢

求解器:只需要将Long改为LongPtr

Long是一个32位整数,但在64位版本的Office下调用Windows API句柄和指针将是64位宽,所以上面的API将失败。

LongPtr是在LongPtr中提供的,以适应这一点,Microsoft的兼容性指南描述了你需要做什么使你的代码在x86 / x64版本的Office下运行。