Betsy_2020
2020-08-12 17:09
采纳率: 28.6%
浏览 360

如何在python中触发excel中的vba宏

问题描述

编一个自动处理数据的py,包含宏的excel是继承的别人的,里面有按钮可以点击计算。现在想做的就是编写python可以自动的点击这个按钮或者自动的触发宏,不需要返回值,计算结果能跟手动一样返回在excel中即可。

已经试过的方法

宏名称是all_transport1(),两种方法都是网上查了资料找到的。

1,用excel appilication直接运行,代码如下:

xlApp.Run('all_transport1()')

没有报错,整个运行结束,但是宏的结果没有显示在excel中

2,用ExecuteExcel4Macro函数,代码如下:

strPara = xlBook.Name + 'all_transport1()'
status = xlApp.ExecuteExcel4Macro(strPara)

运行之后报错代码如下:

File "<COMObject Excel.Application>", line 2, in ExecuteExcel4Macro
  File "C:\Users\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
    result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "There's a problem with this formula.\n\nNot trying to type a formula?\nWhen the first character is an equal (=) or minus (-) sign, Excel thinks it's a formula:\n\n• you type:   =1+1, cell shows:   2\n\nTo get around this, type an apostrophe ( ' ) first:\n\n• you type:   '=1+1, cell shows:   =1+1", 'xlmain11.chm', 0, -2146827284), None)

报错信息没看明白。。。

有什么好的方法可以实现触发宏么???

问题已解决,解决办法:

1.参考采纳的回答:第一种方法中,参数"all_transport1()"的括号不需要,只提供宏名称就行了

import win32com.client
import os.path

xlApp = win32com.client.DispatchEx('Excel.Application')
xlsPath = os.path.expanduser(r'文件路径')
wb = xlApp.Workbooks.Open(Filename=xlsPath)
xlApp.Run('宏名称')
wb.Save()
xlApp.Quit()
print("执行成功")

2.第二种方法,宏名称前需要加一个!叹号,也就是把

strPara = xlBook.Name + 'all_transport1()'

改成

strPara = xlBook.Name + '!all_transport1()'
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • jingluan666 2020-08-12 17:55
    已采纳

    第一种方式,参数"all_transport1()"的括号不需要,只提供宏名称就行了

    import win32com.client
    import os.path
    
    xlApp = win32com.client.DispatchEx('Excel.Application')
    xlsPath = os.path.expanduser(r'文件路径')
    wb = xlApp.Workbooks.Open(Filename=xlsPath)
    xlApp.Run('宏名称')
    wb.Save()
    xlApp.Quit()
    print("执行成功")
    

    https://stackoverflow.com/questions/19616205/running-an-excel-macro-via-python

    打赏 评论
  • dabocaiqq 2020-08-12 17:25
    打赏 评论

相关推荐 更多相似问题