使用 python 运行 Word VBA 宏

Ari*_*Yxm 6 python vba ms-word

我正在尝试使用 python 调用 Word 宏。我试图采用用于通过python运行Excel vba宏的逻辑(有很多关于如何通过python运行Excel宏的示例,但我没有找到任何word)。这是我尝试使用的代码。但是我得到的是 pyhton 永远运行,我不知道为什么。我究竟做错了什么?感谢任何愿意帮助我的人!

这是我的尝试:

import os
import comtypes.client

path=r"path to my folder containing file.docx"

word=comtypes.client.CreateObject("Word.Application")
docx=word.Documents.Open(path, ReadOnly=1)
docx=word.Application.Run("My_Macro_Name")
word.Documents(1).Close(SaveChanges=0)
word.Application.Quit()
wd=0

Run Code Online (Sandbox Code Playgroud)

我也试图更好地指定我的 vba 宏的位置(我将它保存在 .docm 文件中),但仍然没有结果。Python 继续运行而不显示任何结果。这是我的尝试(感谢您到目前为止提供的有用建议!):

import os
import comtypes.client

path=r"path to the .docm file where I saved the vba macro"

word=comtypes.client.CreateObject("Word.Application")
word.Documents.Open(path,ReadOnly=1)
word.Run("Project.Modulo1.ConvertDoc")
word.Documents(1).Close(SaveChanges=0)
word.Application.Quit()
wd=0
Run Code Online (Sandbox Code Playgroud)

小智 1

为什么不通过 Cscript/Wscript 间接运行 VBA 宏?您不必使用 comtypes 包。让我们创建一个 VBS 文件来运行 marco:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("test.xls")

objExcel.Application.Visible = True
objExcel.Workbooks.Add
objExcel.Cells(1, 1).Value = "Test value"

objExcel.Application.Run "Macro.TestMacro()"
objExcel.ActiveWorkbook.Close


objExcel.Application.Quit
WScript.Echo "Finished."
WScript.Quit
Run Code Online (Sandbox Code Playgroud)

蝙蝠文件:

C:\Windows\System32\cscript.exe D:\Script.vbs > output.log
exit
Run Code Online (Sandbox Code Playgroud)

现在您可以从 Python 运行批处理文件:

import subprocess
subprocess.call([r'path where the batch file is stored\name of the batch file.bat'])
Run Code Online (Sandbox Code Playgroud)

您可以在输出日志文件中读取其响应。