You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

32位Excel宏适配64位求助:Win10正常Win11报错

适配64位Office的Excel宏修改方案

你的宏在Windows11报错的核心原因是:Windows11默认搭配的64位Office不支持32位VBA的API声明语法。需要对URLDownloadToFile的API声明做64位适配,同时保留对32位环境的兼容性。

修改后的完整代码

Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
    Alias "URLDownloadToFileA" (ByVal pCaller As LongPtr, _
    ByVal szURL As String, ByVal szFileName As String, _
    ByVal dwReserved As Long, ByVal lpfnCB As LongPtr) As Long
#Else
    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
#End If

Dim Ret As Long

'~~> 图片保存路径,按需修改
Const FolderName As String = "C:\Users\user\Documents\Images\"

Sub Sample()
    Dim ws As Worksheet
    Dim LastRow As Long, i As Long
    Dim strPath As String

    '~~> 指定数据所在工作表
    Set ws = Sheets("Sheet1")

    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row

    For i = 2 To LastRow '<~~ 从第2行开始,第1行为表头
        strPath = FolderName & ws.Range("A" & i).Value & ".jpg"

        Ret = URLDownloadToFile(0, ws.Range("B" & i).Value, strPath, 0, 0)

        If Ret = 0 Then
            ws.Range("C" & i).Value = "HI-Five"
        Else
            ws.Range("C" & i).Value = "SAD FACE"
        End If
    Next i
    MsgBox "Images Downloaded!!!"
End Sub

关键修改说明

  • 条件编译块:用#If VBA7 Then区分Office版本,VBA7对应2010及以后的Office,支持64位环境
  • PtrSafe关键字:64位VBA要求API声明必须添加该关键字,标识函数兼容64位地址空间
  • 指针类型适配:将pCaller和lpfnCB参数从Long改为LongPtr,这是64位下的通用指针类型,自动适配32/64位环境的地址长度

额外注意事项

  • 确保FolderName指定的文件夹已存在,否则下载会失败,可在代码中添加MkDir函数实现自动创建文件夹
  • 若使用Office 365,需在信任中心启用宏,并确保目标URL可正常访问
  • 测试时可单步执行,排查特定行的URL或文件名是否存在格式错误

内容的提问来源于stack exchange,提问作者Garry Brace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:03:10