excel - 确保您的 VBA 代码兼容 64 位

标签 excel function vba 32bit-64bit

我的 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

我尝试将每个私有(private)声明函数更改为私有(private)声明 PtrSafe 函数

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

有人知道解决办法吗?

谢谢

求解器:只需将 Long 也更改为 LongPtr

最佳答案

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

VBA7 中提供了

LongPtr 来适应这一点,Microsoft 的 Compatibility Guide描述了如何使代码在 x86/x64 版本的 Office 下运行。

关于excel - 确保您的 VBA 代码兼容 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23845458/

相关文章:

excel - 打印变量的名称

c++ - 函数声明的返回类型中的 & 符号如何工作?

mysql - 使用 insert 和 select 在表中返回 null

arrays - 将范围(有条件)中的唯一值组合到另一个范围中

python - 类型错误 : '_Folders' object is not callable

excel - 在 Excel VBA 中选择随机名称时排除计数器编号

vba - 循环工作一次,然后 "Run-time error ' 42 4': Object Required"

python - Excel 无法读取 XlsxWriter 创建的公式 SUMIF

c - 在 C 中将匿名结构作为参数传递

excel - 当我不知道上限值时如何在excel vba中使用 'ReDim Preserve'