【问题标题】:Is there a way to run an excel VBA module within a VBScript有没有办法在 VBScript 中运行 excel VBA 模块
【发布时间】:2023-03-29 09:55:01
【问题描述】:

我有一个工作模块,它执行一些数据转换,我想通过运行 vbscript 在任何 Excel 工作表上运行它。

它应该像这样工作:

1) 运行vbscript, 2) 选择excel文件, 3) 数据转换成另一张表, 4) 保存退出。

除了最重要的步骤,第 3 步之外,我的一切都在工作。但是代码在那里,它是一个工作模块,但我必须导入它并从工作簿中为每个进来的工作簿运行它。我不想这样做,对于这个项目来说太麻烦了。

有没有比重新编程每个模块以在 VBScript 中工作更简单的方法?如果我必须在 VBScript 中重新设计解决方案,是否有任何好的 excel VBScript 教程?我进行了一些研究,但找不到任何我需要的深度。

编辑:

This Solution 不能解决我的问题。这假设模块已经导入到 Excel 工作表中。如果我使用它,我会收到错误:

Cannot run the macro 'filename.Module1.macro' The macro may not be available in this workbook or all macros may be disabled

这是因为宏没有添加到工作簿中,正如我上面所说的,我想运行宏,而不必将它添加到我运行它的每个工作簿中。或者,如果有一种方法可以编写添加宏然后运行它的脚本,那也可以。

【问题讨论】:

  • 你为什么使用VBScript?我会推荐 VB.NET 来自动化 Excel。像这样:msdn.microsoft.com/en-us/library/office/…
  • 第 3 步听起来比您想象的要复杂。如果代码不存在于工作簿中,而是其他一些工作簿或作为 .bas 文件等,那么您需要导入它,这需要一些您无法以编程方式进行的权限设置。但是,上面的其他链接回答了直接的问题:是否可能。是的。如果宏存在并且可以访问,那么只要您拥有 Excel 应用程序实例的句柄,就可以运行它。
  • 是的,如果宏没有添加到工作簿中,那么它在哪里?
  • @DavidZemens 这就是我要问的;如果完全可以运行宏而不将其添加到工作簿中。这并不复杂,只是很多工作,因为我使用的这些宏很大。那么看来我将不得不在 VBScript 中重新设计解决方案?或者按照上面的建议尝试 VB.NET?

标签: vba excel vbscript


【解决方案1】:

您不能单独运行 .bas 文件,它不是宏或任何可执行文件。这只是文本。

您需要将其导入工作簿,或者(可能是更好的解决方案)将其导入 XLAM 加载项,然后将该加载项与 Excel 实例一起加载。为此,您需要修改 .bas 代码(可能只需稍作改动)。

或者,使用 VBIDE 库,您可以在运行时以编程方式将 .bas 添加到工作簿。不过,我可能会尽量避免这种情况。

您无需将宏重构为 VBS,也无需使用 VB.Net。只要您可以在任何 Excel 文件中获取 .bas——即使您手动将其放入插件中,您也应该能够运行它。

Run Excel Macro from Outside Excel Using VBScript From Command Line

【讨论】:

  • 我将可重用的代码放在我的 PERSONAL.XLS 中,这样无论我正在处理什么工作簿,它都可以随时使用。 rondebruin.nl/win/personal.htm
  • @HackSlash 我已经很久没有在 Excel 中做任何实质性的事情了,我什至忘记了这是一个选项哈哈。
【解决方案2】:

我的桌面上有一个文本文件,它保存为 .vbs。

如果我从工作簿运行宏,则双击它。你可以做的事情是有限制的,但我认为它有点整洁。

Set objExcel = CreateObject("Excel.Application")
objExcel.Application.Run "'C:\Users\dmorrison\Desktop\HelloMsg.xlsm'!Module1.Hello"
objExcel.DisplayAlerts = False
objExcel.Application.Quit
Set objExcel = Nothing

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 2019-10-30
    相关资源
    最近更新 更多