如何修改Excel宏,将多工作簿合并至宏所在工作簿以外的目标文件?
修改宏以合并到指定目标工作簿
没问题,我帮你调整这个宏,让它把TXT文件的工作表合并到你指定的目标工作簿里,而不是宏所在的文件。下面是修改后的完整代码,我会一步步解释关键改动:
修改后的宏代码
Sub A_CARS_LAURA_Collate_Compiler_ToTarget() Dim Path As String Dim Filename As String Dim wbSource As Workbook Dim wbTarget As Workbook Dim TargetWorkbookPath As String ' -------------------------- ' 请根据你的需求修改这部分! ' 设置目标工作簿的完整路径(示例路径,替换成你实际的文件路径) TargetWorkbookPath = "C:\Users\00089408\Dropbox\TargetWorkbook.xlsx" ' -------------------------- ' 检查目标工作簿是否已经打开 On Error Resume Next Set wbTarget = Workbooks(Dir(TargetWorkbookPath)) On Error GoTo 0 ' 如果没打开,就打开它 If wbTarget Is Nothing Then Set wbTarget = Workbooks.Open(TargetWorkbookPath) End If ' 设置TXT文件所在路径(保持你原来的路径) Path = "C:\Users\00089408\Dropbox\TXT_Files - Copy\A_CARS\" Filename = Dir(Path & "*.txt") Do While Filename <> "" ' 打开源TXT工作簿,用变量明确引用(比ActiveWorkbook更可靠) Set wbSource = Workbooks.Open(Filename:=Path & Filename, ReadOnly:=True) ' 将源工作表复制到目标工作簿的最后一个工作表之后 ' 如果你想放在第一个工作表之后,把wbTarget.Sheets.Count改成1即可 For Each Sheet In wbSource.Sheets Sheet.Copy After:=wbTarget.Sheets(wbTarget.Sheets.Count) Next Sheet ' 关闭源工作簿,不保存(因为是只读打开的) wbSource.Close SaveChanges:=False ' 获取下一个TXT文件名 Filename = Dir() Loop ' 保存目标工作簿(可选,如果你想自动保存合并结果) wbTarget.Save MsgBox "合并完成!所有工作表已添加到目标工作簿。", vbInformation End Sub
关键改动说明
- 替换了
ThisWorkbook为目标工作簿对象:原来的宏用ThisWorkbook(即宏所在的文件)作为合并目标,现在我们用wbTarget变量明确指向你指定的工作簿,彻底分离了宏文件和目标文件。 - 增加目标工作簿的状态检查:代码会先判断目标工作簿是否已经打开,避免重复打开或者报错。
- 用变量引用源工作簿:用
wbSource代替ActiveWorkbook,防止因为Excel窗口切换导致的错误,这是VBA编程的最佳实践。 - 灵活调整工作表插入位置:你可以修改
After:=wbTarget.Sheets(wbTarget.Sheets.Count),把wbTarget.Sheets.Count改成数字(比如1),就能把新工作表放在目标工作簿的第一个工作表之后。
其他场景的调整方案
如果你的目标工作簿不是预先存在的,还可以根据情况修改:
- 新建空白工作簿作为目标:
' 替换原来的目标工作簿打开代码 Set wbTarget = Workbooks.Add ' 保存新建的工作簿(记得修改路径) wbTarget.SaveAs Filename:="C:\Users\00089408\Dropbox\New_Merged_Workbook.xlsx" - 引用已经打开的目标工作簿:
' 直接用工作簿名称引用(比如你的目标工作簿叫"合并结果.xlsx") Set wbTarget = Workbooks("合并结果.xlsx")
内容的提问来源于stack exchange,提问作者D.dee
相关产品推荐
相关产品推荐

