使用PowerShell触发Excel宏,用于创建文本文件

使用PowerShell触发Excel宏,用于创建文本文件,excel,vba,powershell,Excel,Vba,Powershell,我正在使用以下PowerShell脚本触发Excel宏。 Excel宏处理现有文本文件并创建新文本文件 Excel宏本身正在工作,但当我使用PowerShell触发它时,不会创建文本文件 $excel = new-object -comobject excel.application $workbook = $excel.workbooks.open("C:\Pre_Post_Remote.xlsm") $excel.Run("pre_post_remote&quo

我正在使用以下PowerShell脚本触发Excel宏。
Excel宏处理现有文本文件并创建新文本文件

Excel宏本身正在工作,但当我使用PowerShell触发它时,不会创建文本文件

$excel = new-object -comobject excel.application
$workbook = $excel.workbooks.open("C:\Pre_Post_Remote.xlsm")
$excel.Run("pre_post_remote", $fpath, $ptype, $ftype)
$workbook.save()
$workbook.close()
$excel.quit()

没有错误。它运行着,什么也没发生。我怀疑这是因为宏中使用了
脚本.FileSystemObject
来创建文本文件。

只保留powershell代码的前两行,删除其余部分

在VBA中,您可以将代码从模块移动到打开的工作簿,并在VBA代码末尾添加

ThisWorkbook.Save
ThisWorkbook.Close

除非您的powershell和VBA代码比您所说的要多,否则它的功能应该是相同的。

您不能在工作簿中打开VBA代码,而在powershell中只需打开文件即可吗?这意味着您还可以将工作簿的保存和关闭移动到VBA代码中。因此,当工作簿打开时,powershell将完成。关于此问题。可能powershell以保护模式和/或禁用宏的情况下打开文件?但是,是否有任何方法也可以传递参数?(我正在通过powershell脚本将文本文件的路径和一些其他详细信息传递给宏)没问题。不过我想了一件事。也许你想打开文件而不直接关闭它?您可以使用工作簿打开中的application.ontime来延迟运行,在延迟期间,您可以在单元格中键入“stop”,或使用按钮或其他东西来停止代码<代码>范围(某个单元格)。值为“stop”,然后类似于这样的内容。我认为您不能传递参数。但您可以在powershell中编写文本文件,也可以在VBA中读取文本文件。因此,将两者结合起来是你的“黑客”解决方案