如何使用VBA通过URL加载读取SharePoint中存储的Excel工作簿?
报错原因
- Scripting.FileSystemObject 仅支持本地路径、映射网络驱动器路径,无法识别HTTP/HTTPS格式的SharePoint链接
- 你当前使用的是带查询参数的SharePoint分享链接,不是VBA可识别的纯净文件路径
修复步骤
- 转换SharePoint链接格式:
将带参数的分享链接转换为WebDAV路径,规则如下:
- 把开头的
https://替换为\\ - 把链接中
?之后的所有查询参数全部删除 - 把URL编码的特殊字符替换为原始字符:
%20替换为空格,%C3%B8替换为ø
你提供的链接转换后结果为:\\ncconline.sharepoint.com\sites\HerculesDanmark\DE\Dynamisk ankertabel\Ankertabel\Godkendelsesforsøg_skabelon.xlsm
- 替换FSO复制逻辑,直接用Workbooks.Open打开SharePoint路径的文件,或者打开后另存为本地临时文件。
修改后可用代码
Private Sub GenererTestjournaler_Click() Dim i As Long Dim Directory As String, TempDirectory As String Dim wbTemplate As Workbook ' 转换后的SharePoint WebDAV路径 Directory = "\\ncconline.sharepoint.com\sites\HerculesDanmark\DE\Dynamisk ankertabel\Ankertabel\Godkendelsesforsøg_skabelon.xlsm" TempDirectory = "C:\\" & Environ("UserName") & "\\Documents\\Temp_template.xlsm" On Error Resume Next Kill TempDirectory On Error GoTo 0 ' 直接打开SharePoint上的模板文件,无需FSO复制 Set wbTemplate = Workbooks.Open(Directory) ' 如果需要本地副本,打开后另存为即可 wbTemplate.SaveAs TempDirectory ' 原有后续逻辑保持不变 ' ... End Sub
注意事项
- 确保当前Windows账号已登录对应SharePoint站点,且有文件读取权限
- 若路径仍无法识别,可先将路径粘贴到资源管理器地址栏手动访问,确认路径有效后再代入代码
内容的提问来源于stack exchange,提问作者Jonathan Møller Jørgensen
相关产品推荐
相关产品推荐

