为所有Excel运行VBA但不通过Project运行

时间:2016-10-26 20:22:37

标签: vba excel-vba batch-file macros excel

我想在Excel文件上运行VBA(清理功能)但是,我希望仅限某些用户使用它。

示例是向用户发送一个.bat文件并告诉他们保存它并双击它。

  1. 会打开VBA Macro
  2. 宏将要求用户在所有打开的文件中选择“文件”以运行将位于网络位置的宏
  3. 宏检查用户是否选择了有效的Excel文件,然后运行
  4. 但是,我将如何继续这样做?我做了一些研究并读到我需要创建VBS文件。

    有人可以给我一条正确的道路吗?我应该写.batch来调用VBS来存放代码吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

我写了一个非常简短的模块来做这种事情 - 主要是将模块导出/导入为.bas文件。

您需要启用" Microsoft Visual Basic for Applications Extensibility"参考(我的是5.3 - 我不确定是否有不同的版本),但是一旦你完成了它应该可以工作

Public Sub CopyModule(Workbook1 As Workbook, ModuleName As String, Workbook2 As Workbook)
''copies a named module between two workbooks VBA projects
''also acts as a backup as it saves a copy of the module as at today's date

'set name of exported module file
wbname = Workbook1.name & "." & ModuleName & "." & Format(Now, "YYYYMMDD")
Dim filename As String: filename = "H:\ASC\Reporting Files\CMT\" & wbname & ".bas"

'define module to be copied from book 1 based on input arguments
Dim CopyModule As VBComponent
Set CopyModule = Workbook1.VBProject.VBComponents(ModuleName)

'export module
CopyModule.Export (filename)

'import module into book 2
Workbook2.VBProject.VBComponents.Import (filename)

End Sub

这里的想法是在已经打开的两个工作簿之间复制模块,并同时备份模块。但您可以将导出/导入行视为单独的例程,并在不同的时间运行它们。希望这有帮助!