VBA运行FilePicker后_Workbook对象SaveAs方法报错1004求助
解决方案
根因说明
报错的核心原因是代码错误读取了未保存临时工作簿的路径属性:调用Sheets.Copy生成的新工作簿从未执行过保存操作,它的Path属性本身为空值。调用文件选择器会变更Excel的默认工作路径,进一步放大该问题,最终拼接出的保存路径非法,触发SaveAs方法报错。
你之前的临时方案通过新建再关闭工作簿的操作重置了Excel默认路径,属于绕过问题的补丁,没有解决核心的引用对象错误问题。
修正后代码
Sub export_csv() Dim srcWb As Workbook Dim ws As Worksheet Dim savePath As String ' 绑定代码所在的源工作簿,提前获取有效路径,不受激活状态、文件选择器影响 Set srcWb = ThisWorkbook savePath = srcWb.Path & "\Export\" ' 自动创建Export文件夹,避免路径不存在导致的报错 If Dir(savePath, vbDirectory) = "" Then MkDir savePath End If ' 无需选中工作表直接复制,减少异常概率 Sheets(Array("5_CSV_Intermedian_Peptide", "5_CSV_Intermedian_MQ")).Copy For Each ws In ActiveWorkbook.Worksheets ws.Copy ActiveWorkbook.SaveAs Filename:=savePath & "_" & ws.Name & ".csv", _ FileFormat:=xlCSV, CreateBackup:=False, Local:=True ActiveWorkbook.Close SaveChanges:=False Next ActiveWorkbook.Close SaveChanges:=False End Sub
补充说明
如果你的源工作簿本身是未保存的新文件,
ThisWorkbook.Path也会返回空值,建议额外添加判断逻辑,提示用户先保存源文件再执行导出操作。
内容的提问来源于stack exchange,提问作者Bas de Keijzer
相关产品推荐
相关产品推荐

