您不会在这里得到这样的答案。您一次要求太多,而您对如何解决问题还没有表现出最低限度的了解。我们在这里帮助您改进您的代码,而不是为您编写代码。
将您的全部问题分解为第 1、2、3、... N 步。编写执行第 1 步、第 1 步和第 2 步、第 1、2 和 3 步等的宏。如果您在执行第 X 步时遇到问题,请询问第 X 步并向我们展示不符合您预期的代码。
编辑 在我最初的回答中,我说我可以在不知道更多信息的情况下比第 3 步更进一步。您希望将所有 N1-1、N1-2 和 N1-3 工作表合并到一个工作表中,还是拥有三个单独的工作表?后来我意识到,如果我对工作表名称含糊不清,我可以走得更远。
我为您解决问题的步骤:
- 创建感兴趣的工作簿列表。
- 如果顺序很重要,那么该列表的顺序是否正确?如果是和否,请对列表进行排序。
- 向 Workbooks 集合添加一个空工作簿,准备接收组合数据。
- 根据需要重命名工作表“Sheet1”和其他工作表。
- 遍历 [排序] 工作簿列表,打开每个工作簿,将所需信息从源工作表复制到目标工作表,然后关闭工作簿
对于第 1 步,您将需要 Dir$ 函数或文件夹对象的 Files 属性。您应该能够使用 Visual Basic 帮助找到其中任何一个。 Dir$ 是较旧的函数,可能更容易理解。文件夹对象及其属性(例如文件)更加灵活和完整,但可能更难理解。注意:Dir 和 Dir$ 看起来相同,但 Dir$ 的效率略高。
获取每个工作簿名称并使用Debug.Print FileName 证明您拥有所需的工作簿。如果第 1 步的代码不起作用,请提出相关问题。
如果需要对列表进行排序,搜索“excel vba sort an array”。
接下来搜索“excel vba add an empty workbook to the Workbooks collection”。
对于第 5 步,您需要使用 Copy statement,它看起来像:RngSource.Copy Destination := RngDestination。您将需要确定源范围的大小并指定 RngSource。目标范围的大小相同,但第一行将比使用的最后一行多一个,第一列将是 2 而不是 1,因此您可以使用文件名中的日期填写第 1 列。
我希望你能明白。如果您的步骤足够小并且定义足够明确,那么您应该可以轻松找到一些合适的代码来添加到您的不断增长的宏中。如果您遇到困难,这里的小问题通常会有所帮助。