【问题标题】:Run VBA for all Excel but not through Project为所有 Excel 运行 VBA,但不通过 Project
【发布时间】:2016-10-26 20:22:36
【问题描述】:

我想在 Excel 文件上运行 VBA(一个清理功能)但是,我希望它只对某些用户可用。

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

  1. 它将打开 VBA 宏
  2. 宏将要求用户在所有打开的文件中选择“文件”来运行宏,该宏将位于网络位置
  3. 宏检查用户是否选择了有效的 Excel 文件,然后运行

但是,我将如何继续这样做?我做了一些研究并读到我需要创建 VBS 文件。

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

谢谢!

【问题讨论】:

  • 您可以使用 VBScript,也可以将其编写为 VBA,然后将包含您编写的宏的 .xlsm 文件发送给用户。

标签: vba excel batch-file macros


【解决方案1】:

我写了一个非常简短的模块来做这种事情——主要是将模块导出/导入为 .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

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

【讨论】:

  • 我已经删除了这个答案并取消了它 - 我不确定这是否是你正在寻找的那种解决方案 - 如果不是让我知道,我会重新删除
猜你喜欢
  • 2022-07-17
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 2014-01-05
相关资源
最近更新 更多