首页 > 解决方案 > 循环 Excel 另存为

问题描述

我很难尝试运行此代码。我的目标是保存为主文件(“数据条目”)并具有基于另一个 excel 文件(“Book1”)的文件扩展名。这是我的代码:

Sub SaveAsLoop()

Dim wkb As Workbook
Dim fp, en, strName As String
Dim cRng, c as Range

Set cRng = Sheet1.Range("A1",Range("A121").End(xlup))
For Each c In cRng
strName = c.Value 

Set wkb = Workbooks.Open("C:\Users\Desktop\WFH\data entry.xlsm")

fp = "C:\Users\Desktop\WFH\"
mfn = "data entry - "
en = "xlsm"

wkb.SaveAs Filename:=fp & mfn & strName & en, FileFormat:=52

ActiveWorkbook.Close

Next c

End Sub

Book1 的单元格 A1 到单元格 A121 包含 121 个国家/地区,我想创建 121 个数据 entry.xlsm 副本并具有基于单元格引用的扩展名。例如;

Sheet1
A1   | Afghanistan
A2   | Algeria
...    ...
A121 | Serbia

并且输出应该是 121 个带有文件扩展名的 excel 文件,例如“数据输入 - 阿富汗”、“数据输入 - 阿尔及利亚”、...、“数据输入 - 塞尔维亚”。

问题是,循环不工作,只能工作一次,输出只有 1 个文件,文件名使用单元格 A1(“数据输入 - 阿富汗”)。

标签: excelvbaloopssave-as

解决方案


无需在每个循环中打开要复制的工作簿。打开一次并使用SaveCopyAs

Sub SaveAsLoop()
 Dim wkb As Workbook
 Dim fp As String, mfn As String, en As String, strName As String
 Dim cRng As Range, c As Range

 Set cRng = Sheet1.Range("A1:A" & Sheet1.Range("A" & Rows.count).End(xlUp).Row)
 fp = "C:\Users\Desktop\WFH\"
 mfn = "data entry - "
 en = ".xlsm"
 Set wkb = Workbooks.Open(fp & "data entry.xlsm")


 For Each c In cRng
    strName = c.value
    wkb.SaveCopyAs (fp & mfn & strName & en)
 Next c
End Sub

推荐阅读