excel - VBA 疑难解答 - 仅合并选定文件夹中的特定多工作表
问题描述
这段代码有两个问题:
- 我想复制特定工作表,而不是工作簿中的所有工作表
- 一些源工作簿中有一个宏,这会引发一个“Excel 安全通知”,它会中断代码的执行,并且所有工作表都不会复制
问题 1 目标行为: 我想从文件夹中选择文件并将特定工作表复制到我的报告模板中。此工作表始终位于选项卡位置 1 并始终包含“当前且已关闭”。
使用我在网上找到的以下代码,它可以运行,但会带来源工作簿中的所有工作表,包括隐藏工作表。我只想复制第一个选项卡或包含“当前和关闭”的选项卡。
问题 2 目标行为: 我希望代码忽略/规避安全通知,以便其中包含宏的源工作表的迁移不会中断。我不介意源工作簿中的宏是否被禁用,因为合并报告工作簿中不需要它们
感谢您的集体脑力!
Sub mergeFiles() '将文件夹中的所有文件合并到一个主文件中。' 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
推荐阅读
- node.js - 如何从回调中返回变量?
- apache-flink - 如何在 Mesos Flink 集群中实现 JobManager 高可用?
- c# - 将两个二维数组混合为 1 个二维数组
- swift - 使用 swift 类附加到字典
- database-design - 数据库设计新手,寻求建议
- excel - 将多个工作表中的数据合并到一张工作表中
- interface - 允许立即执行单元块的开发接口术语
- clickhouse - 当其中一个分片服务器关闭时,是否有某种方法可以使分布式表仍可用于查询?
- css - 如何使用css改变图像中某种颜色的像素?
- php - PHP - MySQL:如何按日期选择数据分组