使用Access VBA移动文件夹至映射网络驱动器时遇错误70(拒绝访问)
Access VBA移动文件夹到映射网络驱动器报错误70“拒绝访问”的解决思路
问题描述
本地文件夹可通过VBA正常移动到本机其他目录,但移动到已拥有完全访问权限的Synology NAS映射网络驱动器时,持续触发错误70“拒绝访问”。
- 可通过
MkDir在目标网络驱动器创建文件夹,手动也能正常复制/移动/删除该驱动器上的内容 - 测试用空文件夹
Testfolder复现问题,测试代码如下:
Private Sub Test_Click() Dim FSO As New FileSystemObject Set FSO = CreateObject("Scripting.FileSystemObject") Dim Origin As String Dim Destination As String Origin = "C:\Testfolder" '源文件夹路径 Destination = "Y:\text\" '目标路径,以\结尾 FSO.MoveFolder Origin, Destination End Sub
已尝试的无效操作
- 以管理员权限启动Access
- 重置Synology NAS管理员权限
- 断开并重新连接网络驱动器
- 将目标路径改为UNC格式
- 使用xcopy的Shell方案
可能的解决方向
1. 调整FSO移动的路径逻辑
FSO的MoveFolder方法对路径结尾的\有严格逻辑:结尾带\时,会将源文件夹移动到目标目录下;不带则会将源文件夹重命名为目标路径名称。可尝试两种写法:
' 写法1:明确指定目标文件夹的完整路径 Destination = "Y:\text\Testfolder" FSO.MoveFolder Origin, Destination ' 写法2:先确认目标目录存在,再执行移动 If Not FSO.FolderExists("Y:\text") Then FSO.CreateFolder "Y:\text" End If FSO.MoveFolder Origin, "Y:\text\"
2. 改用Windows API实现移动
FSO对网络驱动器的权限处理可能存在限制,调用Windows原生的MoveFileEx API可绕开该问题:
Private Declare PtrSafe Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" ( _ ByVal lpExistingFileName As String, _ ByVal lpNewFileName As String, _ ByVal dwFlags As Long) As Boolean Private Const MOVEFILE_REPLACE_EXISTING = &H1 Private Const MOVEFILE_COPY_ALLOWED = &H2 Private Sub Test_MoveAPI() Dim Origin As String Dim Destination As String Origin = "C:\Testfolder" Destination = "Y:\text\Testfolder" ' 允许替换已存在的目标,跨卷时自动执行复制+删除逻辑 If MoveFileEx(Origin, Destination, MOVEFILE_REPLACE_EXISTING Or MOVEFILE_COPY_ALLOWED) Then MsgBox "移动成功" Else MsgBox "移动失败,错误码:" & Err.LastDllError End If End Sub
注:
PtrSafe适配64位Office,32位版本可删除该关键字。
3. 重新映射网络驱动器并指定凭据
映射网络驱动器的权限上下文可能和VBA进程不一致,可在代码中重新映射并明确传入NAS的访问凭据:
Private Sub MapNetworkDrive() ' 先断开已有的Y盘映射 Shell "net use Y: /delete /yes", vbHide ' 重新映射,替换为你的NAS UNC路径、用户名和密码 Shell "net use Y: \\你的NASIP\共享文件夹名 /user:NAS用户名 密码", vbHide End Sub ' 移动前先执行重新映射 Private Sub Test_Click() Call MapNetworkDrive Dim FSO As New FileSystemObject FSO.MoveFolder "C:\Testfolder", "Y:\text\" End Sub
注意:明文存储密码存在安全风险,可改为让用户手动输入或加密存储。
4. 检查共享权限与文件夹锁定
- 确认NAS共享文件夹的共享权限(而非仅NTFS权限)已给当前用户“完全控制”权限
- 关闭所有可能访问源文件夹的程序(如资源管理器、杀毒软件),避免文件夹被锁定
内容的提问来源于stack exchange,提问作者Mawimu
相关产品推荐
相关产品推荐

