【问题标题】:How can I run one VBA macro on all the (closed) Excel files in a folder?如何在文件夹中的所有(已关闭)Excel 文件上运行一个 VBA 宏?
【发布时间】:2014-08-12 06:56:43
【问题描述】:
  • Excel 2010

我自己打开带有原始测量值的文件后,我有一个宏,它对原始数据执行一些操作,即对其进行排序、删除一些内容、将一些内容复制到新工作表中。

最后,它关闭原始数据文件(而保存更改)并关闭、保存和重命名新创建的 Excel 文件,该文件是在所有排序、删除和复制后创建的宏。

所以考虑到我只打开了这个宏文件 (.xlsm)...

如何在所述宏文件的同一文件夹中的所有 Excel 文件 (.xlsx) 上运行该宏?我不想一个一个打开它们并重新运行宏。

我目前正在通过以下方式关闭打开的“原始”文件:

ActiveWorkbook.Saved = True
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True

不得不承认我不知道它们是否完全有意义,但它们确实有效。

【问题讨论】:

  • I'd prefer not to open them one by one and re-run the macro again 考虑到您performs some actions on "raw" measurement data, sorts it, deletes some stuff, copies some stuff into a new sheet,这是不可能的。您可以使用 DIR 函数迭代文件夹中的每个文件,这里有很多示例。
  • @mehow 是的。但这并不意味着唯一的方法就是不打开它。如果 OP 正在进行排序、删除和复制,我认为没有比先打开工作簿更好的执行方法了。
  • @L42 你可能是对的,在这个级别上,听起来开放是正确的做法,但一般来说,如果有一些工作簿可以提高性能,那么在某个时候就会发挥作用然后 OP 就会意识到 ADO 可能是最好的选择。

标签: vba excel


【解决方案1】:

它比您发布的链接更简单。
见下文:

Sub stantial()
   Dim myfiles, wb As Workbook, ws As Worksheet
   myfiles = Dir(Thisworkbook.Path & "\*.xlsx")
   Do While Len(myfiles) <> 0
       'Debug.Print myfiles
       '~~> open as readonly since you don't want to alter the original
       Set wb = Workbooks.Open(Thisworkbook.Path & "\" & myfiles, , True)
       '~~> Do your stuff here (edit, copy, sort etc...)
       wb.Close False
       Set wb = Nothing '~~> clean up
       myfiles = Dir
   Loop   
End Sub

以上代码检索所有扩展名为 .xlsx 的文件名,然后使用 Workbooks Open 方法打开它。
打开文件后,您可以处理打开工作簿对象并做你的事情。
在继续下一步之前,关闭工作簿,清理变量。 HTH。

【讨论】:

  • 我可以不保留原始宏的关闭方法,我是否必须使用wb.Close(或者任何新的宏都可以这样做)?
  • @henry 你以前的方法是什么?我的意思是,你为什么不想关闭你打开的 wb?
  • 编辑了操作,希望能解释一下。
  • @henry wb.Close 不是一个新宏,我使用它是因为我将变量 wb 设置为打开的工作簿,因此我们可以直接在该对象中工作。它的功能与您的代码相同,但更明确。
  • 刚刚用你的代码做了一个测试,wb.Close False 被注释掉了。它就像一个魅力。所以我可以说这已经解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多