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

VBA中Name As方法移动xlsm工作簿报错75的原因

问题原因

该报错和工作簿是否为启用宏的.xlsm格式无关,错误75是VBA文件操作的路径/文件访问错误,对应代码场景的触发原因如下:

  • MkDir语句无存在性校验逻辑:如果目标路径fold_path对应的文件夹已经存在,直接执行MkDir会直接抛出错误,不会自动跳过。
  • Name语句的使用不满足前置要求:
    源文件被锁定:待移动的工作簿正被Excel打开,Excel会对打开的文件加排他锁,操作系统层面会阻止所有对该文件的移动、重命名、删除操作,这是报错的核心原因。
    目标路径必须真实存在:Name语句不会自动创建不存在的父目录,如果跳过创建文件夹的步骤直接执行移动,会因为目标路径不存在触发错误。
    目标路径无重名文件:如果fold_path下已经存在matenimiento.xlsm,执行重命名移动时也会触发访问错误。
正确实现方案

根据代码运行位置的不同,选择对应方案:

方案1:代码存储在其他工作簿中(非待移动的xlsm文件)

先关闭待移动的工作簿解除文件锁,再执行路径判断、移动操作,示例代码:

Dim xlsm_wb         As Workbook
Dim xlsm_path       As String
Dim xlsm_name       As String
Dim fold_path       As String
Dim new_file_path   As String
       
Set xlsm_wb = Application.Workbooks("repositorio nóminas.xlsm")
xlsm_path = xlsm_wb.Path
xlsm_name = xlsm_wb.FullName
fold_path = xlsm_path & "\repositorio nóminas"
new_file_path = fold_path & "\matenimiento.xlsm"

' 关闭工作簿并保存最新修改,解除文件锁
xlsm_wb.Close SaveChanges:=True

' 判断目标文件夹是否存在,不存在则创建
If Dir(fold_path, vbDirectory) = "" Then
    MkDir fold_path
End If

' 判断目标路径是否存在同名文件,存在则先删除
If Dir(new_file_path) <> "" Then
    Kill new_file_path
End If

' 执行移动重命名操作
Name xlsm_name As new_file_path

方案2:代码存储在待移动的xlsm文件本身

如果VBA代码就写在待移动的工作簿里,关闭工作簿会导致代码终止运行,此时需要用SaveAs直接将文件存到目标路径,再清理原位置的旧文件:

Dim xlsm_wb         As Workbook
Dim xlsm_path       As String
Dim xlsm_name       As String
Dim fold_path       As String
Dim new_file_path   As String
       
Set xlsm_wb = ThisWorkbook ' 指向代码所在的当前工作簿
xlsm_path = xlsm_wb.Path
xlsm_name = xlsm_wb.FullName
fold_path = xlsm_path & "\repositorio nóminas"
new_file_path = fold_path & "\matenimiento.xlsm"

' 判断目标文件夹是否存在,不存在则创建
If Dir(fold_path, vbDirectory) = "" Then
    MkDir fold_path
End If

' 直接另存为到目标路径,指定xlsm格式避免宏丢失
xlsm_wb.SaveAs Filename:=new_file_path, FileFormat:=xlOpenXMLWorkbookMacroEnabled

' 另存完成后删除原位置的旧文件,加容错避免旧文件被暂存锁定导致报错
On Error Resume Next
Kill xlsm_name
On Error GoTo 0
注意事项
  • 涉及带重音符号、非英文的路径,确保VBA编辑器编码与系统编码一致,避免路径识别乱码,常规西语、中文Windows系统下不会触发该类问题。
  • SaveAs操作必须指定正确的文件格式枚举值,.xlsm对应格式常量为xlOpenXMLWorkbookMacroEnabled(值为52),请勿使用默认格式存储,否则会丢失文件内的宏代码。

内容的提问来源于stack exchange,提问作者user19206253

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:46:00