You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:35:05