【发布时间】:2021-05-18 21:45:11
【问题描述】:
操作系统:Windows 10、1903
办公室:Office 2016
Powershell:5.1
我有一个 Excel 文件,我们称之为 records.xlsm,它每天都会自动下载。我需要对该文件进行处理,然后将其发送到其他地方。我已经创建了必要的 VBA 代码来自动执行此操作,并且该代码位于一个 .bas 文件中,我们将调用 cleanup.bas。
我正在尝试找到一种方法来使用 Powershell 或其他一些罐装 Microsoft 工具来自动针对文件运行 vba 代码。我还没有找到一种(我喜欢的)使用 Powershell 来做到这一点的方法。
我的目标是使用任务调度程序运行 Powershell 脚本,以使用 cleanup.bas 中的代码在 records.xlsm 中进行更改。
我不介意是否必须将 cleanup.bas 导入 records.xlsm,但该过程也必须自动化。
我认为这是可能的。我要求确认/否认是否是。如果可能,请告诉我我需要从哪里开始查找文档。
我从here 找到了代码。我不介意走那条路,但它似乎不那么优雅。实用性胜过漂亮,所以如果没有其他效果,我会使用它。
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $true
$xl.DisplayAlerts = $false
$workbook = $xl.Workbooks.Open("c:\temp\test.xls")
$xlmodule = $workbook.VBProject.VBComponents.Add(1)
$code = @"
sub cleanup()
'your code goes here
end sub
"@
$xlmodule.CodeModule.AddFromString($code)
感谢您的时间。
【问题讨论】:
-
最简单的方法是将您的 VBA 放在一个独立的 Excel xlsm 文件中,您可以在打开源文件后打开该文件 - 然后使用
Application.Run运行宏,传入名称源工作簿作为代码的“目标”。 -
感谢您抽出宝贵的时间,但我们在这里并不容易。
-
我不确定您在该评论中所说的内容 - 您想按照您发布的方式进行操作吗?如果是这样,那为什么不试试呢?
-
至于这个......“我正在尝试找到一种方法来使用 Powershell 或其他一些罐装 Microsoft 工具来自动针对文件运行 VBA 代码。我还没有找到方法(我喜欢)使用 Powershell 来做到这一点。”......这是一件非常自以为是的事情。从而为您进行意见辩论做好准备。只有你知道你会喜欢什么,不喜欢什么。因此,您实际上是在向人们征求一堆想法,因此当 SO 和整个网络上已经存在一堆想法时,您就可以做出决定。
-
PowerShell 在您使用时通过 COM 与 MSOffice 应用程序对话。为什么要将独立的 VBA 加入其中。只需使用 VBA 用例并将其转换为 PowerShell 以直接通过 COM 对文件运行?为什么要使这个用例过于复杂,仅仅因为?不要不必要地增加你的核心工作量,然后把它转嫁给那些跟随你的人。
标签: excel vba powershell