Windows 7 x64环境下MS Access VBA下载网络文件报错:无法定位指定资源
Windows 7 x64环境下MS Access VBA下载网络文件报错:无法定位指定资源
我之前遇到过一模一样的问题,这个错误在Win7上出现,大概率是TLS版本兼容问题导致的——现在绝大多数HTTPS网站都要求使用TLS 1.2及以上版本,但Windows 7默认不启用TLS 1.2,而且你用的MSXML2.XMLHTTP组件在Win7上的旧版本,本身就不支持强制指定高版本TLS协议。
下面给你几个针对性的解决步骤,按顺序试下来基本能搞定:
1. 替换XMLHTTP组件为支持TLS的版本
把代码里的MSXML2.XMLHTTP换成MSXML2.ServerXMLHTTP.6.0,这个组件专门为服务端/网络请求优化,支持手动设置TLS版本,兼容性更好。
2. 在代码中强制启用TLS 1.2
在objXMLHTTP.Open之前添加TLS版本设置,确保请求强制使用TLS 1.2协议,避免Win7默认用旧协议被网站拒绝。
3. 安装Win7系统补丁(关键前提)
Windows 7需要安装KB3140245补丁才能原生支持TLS 1.2,如果没装这个补丁,哪怕代码设置对了也会报错,记得先给Win7系统补上这个补丁。
修正后的完整代码:
Sub DownloadFile(URL As String, LocalFile As String) Dim objXMLHTTP As Object Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0") ' 强制启用TLS 1.2协议(16777216是TLS 1.2的版本标识) objXMLHTTP.setOption 3, 16777216 objXMLHTTP.Open "GET", URL, False ' 可选:添加超时设置,避免请求卡住 objXMLHTTP.setTimeouts 30000, 30000, 30000, 30000 objXMLHTTP.send If objXMLHTTP.Status = 200 Then Dim objADOStream As Object Set objADOStream = CreateObject("ADODB.Stream") objADOStream.Open objADOStream.Type = 1 ' adTypeBinary objADOStream.Write objXMLHTTP.ResponseBody objADOStream.SaveToFile LocalFile, 2 ' adSaveCreateOverWrite objADOStream.Close Set objADOStream = Nothing Else ' 可选:添加错误提示,方便排查问题 MsgBox "下载失败,状态码:" & objXMLHTTP.Status & ",描述:" & objXMLHTTP.StatusText End If Set objXMLHTTP = Nothing End Sub Private Sub Form_Open(Cancel As Integer) Call DownloadFile("https://ghaemcoarsh.com/APPY/BMH.exe", "C:\Users\Administrator\Desktop\test\BMH.exe") End Sub
额外排查点
- 确认Win7的IE浏览器至少升级到IE11,因为MSXML组件依赖IE的安全配置
- 检查目标文件夹
C:\Users\Administrator\Desktop\test\是否存在,避免后续保存文件失败 - 排查Win7的防火墙/杀毒软件是否拦截了Access的网络请求
备注:内容来源于stack exchange,提问作者Johnydev
相关产品推荐
相关产品推荐

