如何使用VBA将Excel备份保存到需身份验证的SharePoint并解决运行报错
核心报错原因
- 文件名包含非法字符:时间格式中使用了
:,Windows和SharePoint均不允许文件名出现冒号 MapNetworkDrive不支持HTTPS协议路径:WScript.Network的映射方法仅支持SMB协议的UNC路径,无法直接映射SharePoint的HTTPS链接- 用户名格式不符合要求:SharePoint Online验证需要完整的邮箱格式账号,仅填账号前缀会验证失败
修复后的代码
' 替换为SharePoint对应的UNC路径 ServerShare = "\\mycom.sharepoint.com@SSL\sites\Backupvehculo\Shared Documents\General\Copia\" UserName = "你的完整邮箱账号,如xxx@mycom.com" password = "你的账号密码" Dim DriveLetter As String DriveLetter = "Z:" ' 选择一个未被占用的盘符 Set NetworkObject = CreateObject("WScript.Network") ' 先尝试断开已存在的同盘符映射,避免冲突 On Error Resume Next NetworkObject.RemoveNetworkDrive DriveLetter, True, True On Error GoTo 0 ' 映射网络驱动器 NetworkObject.MapNetworkDrive DriveLetter, ServerShare, False, UserName, password ' 修复文件名,把时间的冒号替换为短横线 nombrearchivo = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5) & VBA.Format(VBA.Now, "_dd-mm-yyyy-hh-mm-ss") ' 直接用映射后的盘符路径保存,稳定性更高 ActiveWorkbook.SaveAs Filename:= _ DriveLetter & "\" & nombrearchivo & ".xlsm" _ , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False ' 用完断开映射可选,不需要长期保留可以加上 ' NetworkObject.RemoveNetworkDrive DriveLetter, True, True Set NetworkObject = Nothing
额外注意事项
- 如果不想映射盘符,也可以直接在保存时使用UNC格式的SharePoint路径,无需额外映射,只要你本地已经登录过SharePoint账号并记住凭据即可
- 如果报错仍然存在,可以先手动在资源管理器地址栏输入上述UNC路径,确认能正常打开且账号密码验证通过后再运行代码
内容的提问来源于stack exchange,提问作者Gemmabr
相关产品推荐
相关产品推荐

