VBA 疑难解答 - 仅合并所选文件夹中的特定多个工作表



我对这段代码有两个问题:

  1. 我想复制特定的工作表,而不是工作簿中的所有工作表
  2. 一些源工作簿中有一个宏,这会引发一个"Excel 安全通知",中断代码的执行,并且所有工作表都不会复制

问题 1 目标行为:我想从文件夹中选择文件,并将特定工作表复制到我的报告模板中。此工作表始终位于制表位 1 中,并且始终包含">当前和已关闭"。

使用我在网上找到的以下代码,它可以正常工作,但从源工作簿中获取所有工作表,包括隐藏的工作表。我只想复制第一个选项卡或包含">当前和已关闭"的选项卡。

问题 2 目标行为:我希望代码忽略/规避安全通知,以便其中包含宏的源工作表的迁移不会中断。我不介意源工作簿中的宏是否被禁用,因为它们在合并报告工作簿中不是必需的

感谢您的集体脑力!


子合并文件(( '将文件夹中的所有文件合并为主文件。 'https://professor-excel.com/merge-excel-files-combine-workbooks-one-file/#Method_4_Merge_files_with_a_simple_VBA_macro

'Define variables:
Dim numberOfFilesChosen, i As Integer
Dim tempFileDialog As FileDialog
Dim mainWorkbook, sourceWorkbook As Workbook
Dim tempWorkSheet As Worksheet
Set mainWorkbook = Application.ActiveWorkbook
Set tempFileDialog = Application.FileDialog(msoFileDialogFilePicker)
'Allow the user to select multiple workbooks
tempFileDialog.AllowMultiSelect = True
numberOfFilesChosen = tempFileDialog.Show
'Loop through all selected workbooks
For i = 1 To tempFileDialog.SelectedItems.Count
'Open each workbook
Workbooks.Open tempFileDialog.SelectedItems(i)
Set sourceWorkbook = ActiveWorkbook
'Copy each worksheet to the end of the main workbook
For Each tempWorkSheet In sourceWorkbook.Worksheets
tempWorkSheet.Copy after:=mainWorkbook.Sheets(mainWorkbook.Worksheets.Count)
Next tempWorkSheet
'Close the source workbook without saving changes in the source workbooks
sourceWorkbook.Close savechanges:=False
Next i

结束子

若要禁止显示警告,请关闭警报,以只读方式打开工作簿,并且不更新链接:

Application.DisplayAlerts = False
Workbooks.Open tempFileDialog.SelectedItems(i), False, True 

若要仅对特定工作表执行操作,请根据您的优先级在For...next循环中添加条件检查,"当前和已关闭"的优先级是否高于第一个选项卡,或者您希望同时复制两者。要检查工作表名称,请使用tempWorkSheet.NameInstr()函数检查它是否包含"当前和已关闭"。

请记住在函数结束时通过以下方式重新启用警报:

Application.DisplayAlerts = True

最新更新