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

Excel VBA多文件保存问题:新建文件夹无法正确存放生成的文件

Excel VBA多文件保存问题:新建文件夹无法正确存放生成的文件

嗨,我来帮你排查这个问题~你遇到的情况很常见,核心原因就是保存文件时没有把新建文件夹的路径和文件名拼接起来,VBA默认会把文件存在当前工作簿的根目录(和你新建的文件夹同级),而不是文件夹内部。

结合你的需求,我给你调整了代码,关键修正点都标了注释,你可以直接参考:

Sub Werkbladopslaan()

' Bestand opslaan en mappen aanmaken in @In bewerking voor alle materialen
Application.ScreenUpdating = False

Dim myName As String
Dim strDefpath As String
Dim rng As Range
Dim row As Range
Dim cell As Range
Dim folderPath As String
Dim DateStr As String
Dim saveFileName As String

' 设置基础路径为当前工作簿所在目录(如果工作簿未保存,ThisWorkbook.Path会为空,建议先保存工作簿)
strDefpath = ThisWorkbook.Path & "\"

Set rng = Range("B11:B14")

For Each row In rng.Rows
    For Each cell In row.Cells
        If cell.Value > 0 Then
            DateStr = Format(Date, "dd-mm-yyyy")
            ' 定义文件名和文件夹名(你可以根据需求分开设置不同名称)
            saveFileName = cell.Text & "-" & "Leish " & DateStr
            cell.Offset(0, 3).Value = saveFileName
            
            ' 构建要创建的文件夹的完整路径
            folderPath = strDefpath & saveFileName
            
            ' 检查文件夹是否存在,不存在则创建
            If Dir(folderPath, vbDirectory) = "" Then
                MkDir folderPath
            End If
            
            ' 保存工作簿副本到新建文件夹,必须拼接完整路径+文件名+后缀
            ' 后缀根据你的文件类型调整:.xlsm(带宏)/.xlsx(无宏)/.xls(旧格式)
            ThisWorkbook.SaveCopyAs folderPath & "\" & saveFileName & ".xlsm"
        End If
    Next cell
Next row

Application.ScreenUpdating = True
MsgBox "所有文件已保存完成!", vbInformation

End Sub

另外给你提几个小提醒:

  • 如果你的工作簿还没手动保存过,ThisWorkbook.Path会返回空值,创建文件夹会报错,建议先保存一次工作簿,或者在代码里加判断提示用户先保存。
  • 文件夹和文件名里别用Windows禁止的特殊字符(比如\ / : * ? " < > |),如果单元格内容可能包含这些字符,可以在代码里加替换处理,比如把特殊字符换成下划线。
  • 一定要匹配正确的文件后缀,比如你的文件是带宏的,就用.xlsm,否则保存后宏会丢失。

备注:内容来源于stack exchange,提问作者Caroline

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:34:50