列添加并使用工作簿名称填充文件夹中的所有工作簿

时间:2014-01-13 14:09:02

标签: excel batch-file excel-vba vba

我需要的东西有点复杂和具有挑战性,我不知道在其他任何地方寻求帮助。我有几个excel文件,命名为thb201301221.xls,thb20130201.xls,这些文件中使用的命名约定类似于创建文件的thb +日期+(1或2)。在每个文件中,有几张纸。我对某些表格感兴趣,名为N1-1,N1-2和N1-3。我需要做的是:

  1. 将这些N1-1,N1-2和N1-3纸合成一张纸 工作簿
  2. 在每张纸的开头添加一列并填充 工作簿名称中的日期(在文件thb201301221.xls中 2013年1月22日)
  3. 在其中创建工作簿和工作表并使用这些填充它 新创建的工作表,它们是N1-1,N1-2 AND的组合 工作簿中的N1-3张。
  4. 有人可以帮助我完成这项任务。我不可能想到手动这样做,我真的很感谢你的帮助。

    谢谢, Korhan

1 个答案:

答案 0 :(得分:0)

你不会在这里得到这样的问题。你已经一次性要求太多了,你没有对如何解决问题表现出极少的理解。我们在这里帮助您改进代码而不是为您编写代码。

将您的总问题分解为步骤1,2,3,... N.编写执行步骤1,步骤1和步骤2,步骤1,2和3的宏,依此类推。如果您在步骤X中遇到问题,请询问步骤X并向我们展示不符合您预期的代码。

编辑在我的原始答案中,我说我可以在不知情的情况下超越第3步。您是否希望将所有N1-1,N1-2和N1-3工作表合并为一个工作表,或者您是否有三个单独的工作表?我后来意识到如果我对工作表名称含糊不清,我可以走得更远。

我的问题所在:

  1. 创建感兴趣的工作簿列表。
  2. 如果序列很重要,那个列表是否正确顺序?如果是和否,请对列表进行排序。
  3. 将空工作簿添加到Workbooks集合,准备接收组合数据。
  4. 根据需要重命名worksheeet“Sheet1”和其他工作表。
  5. 遍历[sorted]工作簿列表,打开每个工作簿,将所需信息从源复制到目标工作表并关闭工作簿
  6. 对于第1步,您将需要Dir $函数或Folders对象的Files属性。您应该能够使用Visual Basic帮助找到。 Dir $是较旧的功能,可能更容易理解。文件夹对象及其属性(例如文件)更灵活,更完整,但可能更难理解。注意:Dir和Dir $看起来相同,但Dir $的效率稍高。

    获取每个工作簿名称并使用Debug.Print FileName来证明您已获得所需的工作簿。如果您的步骤1的代码不起作用,请询问有关它的问题。

    如果您需要对列表进行排序,请搜索“excel vba sort an array”。

    接下来搜索“excel vba将空工作簿添加到Workbooks集合”。

    对于第5步,您需要使用Copy statement,其类似于:RngSource.Copy Destination := RngDestination。您需要确定源范围的大小并指定RngSource。目标范围将是相同的大小,但第一行将比使用的最后一行多一个,第一列将是2而不是1,因此您可以使用文件名中的日期填充第1列。

    我希望你明白这个主意。如果你的步骤足够小并且定义得足够好,你应该没有困难找到一些合适的代码来添加到你不断增长的宏。如果遇到困难,这里的问题通常会产生一些帮助。