我对这段代码有两个问题:
- 我想复制特定的工作表,而不是工作簿中的所有工作表
- 一些源工作簿中有一个宏,这会引发一个"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.Name
和Instr()
函数检查它是否包含"当前和已关闭"。
请记住在函数结束时通过以下方式重新启用警报:
Application.DisplayAlerts = True