使用VBA映射SharePoint文档库提示未认证错误该如何解决?
问题核心原因
- 路径格式错误:SharePoint Online的UNC映射需要固定格式,你当前的路径缺少
@SSL\DavWWWRoot标识,且URL编码的%20在UNC路径中不生效,需要替换为实际空格。 - 身份认证规则不兼容:当前Office 365默认启用多因素认证(MFA),
MapNetworkDrive方法不支持直接传递带MFA的账号密码进行认证,明文密码会被身份校验拦截。 - 服务配置未完全生效:仅添加信任站点不足以满足WebClient的认证要求,还需要调整WebClient对应的注册表参数。
- SharePoint权限/策略限制:如果站点默认关闭了旧版认证、WebDAV访问权限,也会触发该报错。
解决步骤
修正UNC路径
正确的SharePoint Online UNC映射格式为:\\<mydomain>.sharepoint.com@SSL\DavWWWRoot\sites\<站点路径>\<文档库名称>
把路径里的%20全部替换为实际空格,比如文档库名为“BBC News”就直接写BBC News,不要用编码格式。调整身份认证方式
优先采用缓存凭据的方式:
- 先手动在文件资源管理器中映射一次Z盘,路径填上述修正后的UNC地址,勾选“记住我的凭据”,完成认证后确保可以正常访问Z盘内的文件
- 代码中移除
MapNetworkDrive的用户名、密码参数,直接调用系统缓存的凭据完成映射
如果必须在代码中传递密码:
- 前往Azure AD账号管理中心,为当前账号启用应用密码功能,生成专属应用密码,替换代码中的登录密码
- 确保账号没有开启强制MFA,或者管理员已经为该账号放开了旧版认证的访问权限
- 补全WebClient注册表配置
打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters,修改以下键值:
BasicAuthLevel:值设置为2,允许SSL连接的基本认证FileSizeLimitInBytes:值设置为0xffffffff,避免大文件访问限制
修改后重启WebClient服务,或者直接重启电脑。
- 确认SharePoint端权限
- 确认当前账号对目标文档库有至少读取权限,没有被条件访问策略拦截
- 联系SharePoint管理员,确认站点已经开启WebDAV访问权限,没有禁用旧版认证规则
修正后代码示例
Dim objNetwork As Object Set objNetwork = CreateObject("WScript.Network") ' 注意替换为实际的站点、文档库名称,%20换为空格 objNetwork.MapNetworkDrive "Z:", _ "\\<mydomain>.sharepoint.com@SSL\DavWWWRoot\sites\<my_sharepoint_site>\BBC News", _ False MsgBox "hello" ' 加True参数强制卸载,避免文件占用导致报错 objNetwork.RemoveNetworkDrive "Z:", True Set objNetwork = Nothing
内容的提问来源于stack exchange,提问作者Rogue
相关产品推荐
相关产品推荐

