修改Excel VBA代码:按指定子文件夹保存模板文件
修改后的Excel VBA代码(保存至指定子文件夹)
关键改动说明
- 修复原代码中
rngNames的赋值错误(原代码使用.Values会导致类型不匹配) - 循环时读取对应行B列的子文件夹名称,动态拼接保存路径
- 新增自动创建子文件夹的逻辑,避免因文件夹不存在导致保存失败
- 增加空值判断,跳过无效的文件名或文件夹名称
修改后的完整代码
Public Sub SaveTemplate() Const strBasePath As String = "C:\My Documents\" ' 基础根路径 Const strTemplatePath As String = "C:\My Documents\template.xls" Dim rngNames As Excel.Range Dim rng As Excel.Range Dim wkbTemplate As Excel.Workbook Dim subFolderPath As String Dim fullSavePath As String ' 引用File Names工作表A1:A200的单元格区域(修正原代码的Values错误) Set rngNames = ThisWorkbook.Worksheets("File Names").Range("A1:A200") ' 打开模板文件 Set wkbTemplate = Application.Workbooks.Open(strTemplatePath) ' 遍历每个文件名单元格 For Each rng In rngNames.Cells ' 跳过空单元格 If Trim(rng.Value) <> "" And Trim(rng.Offset(0, 1).Value) <> "" Then ' 获取对应行B列的子文件夹名称,拼接成子文件夹路径 subFolderPath = strBasePath & rng.Offset(0, 1).Value & "\" ' 如果子文件夹不存在,创建它 If Dir(subFolderPath, vbDirectory) = "" Then MkDir subFolderPath End If ' 拼接完整保存路径(子文件夹+A列文件名) fullSavePath = subFolderPath & rng.Value ' 保存模板文件 wkbTemplate.SaveAs fullSavePath End If Next rng ' 关闭模板文件,不保存更改 wkbTemplate.Close SaveChanges:=False End Sub
代码细节说明
rng.Offset(0, 1).Value:获取当前A列单元格同一行的B列值(子文件夹名称)Dir(subFolderPath, vbDirectory):检查指定路径是否为已存在的文件夹MkDir subFolderPath:创建不存在的子文件夹- 空值判断:跳过A列或B列为空的行,避免生成无效路径导致报错
内容的提问来源于stack exchange,提问作者Kreme
相关产品推荐
相关产品推荐

