【问题标题】:How to stop pop when calling macro from python从python调用宏时如何停止弹出
【发布时间】:2016-03-16 13:09:34
【问题描述】:

我在 excel 文件中有宏代码,我使用 python 代码调用此宏,但每次调用此代码时,它都会弹出(如下),因为代码是从远程机器执行的,并且 excel 文件弹出用户无法访问。

代码:

import win32com.client
def insert_column():
        fName= 'F:\\Reports\\Logs\\PERF_RESULTS.xlsm'
        xlApp = win32com.client.Dispatch("Excel.Application")
        fTest = xlApp.Workbooks.Open(fName,ReadOnly=1)
        macName = fTest.Name + '!' +'Insert_Column'
        xlApp.Application.Run(macName)
        xlApp.Application.Save()
        xlApp.Application.Quit()
        xlApp = None

【问题讨论】:

  • 不确定如何从 Python 中执行此操作,但在 Excel VBA 中,您可以在 Open 之前使用 Application.DisplayAlerts = False 来抑制此类弹出窗口。
  • @JohnColeman 这解决了我的问题,您应该将其发布为答案:)

标签: python excel macros win32com


【解决方案1】:

Excel Application 对象有一个DisplayAlerts 属性,可以设置为等于False。我不确定从 Python 调用它时使用的确切语法,但类似于

xlApp.DisplayAlerts = False

行前

fTest = xlApp.Workbooks.Open(fName,ReadOnly=1)

应该禁止该弹出窗口。

【讨论】:

  • xlApp.DisplayAlerts = False 不适用于运行时错误
  • @RiteshKarwa 这似乎有点神秘。一定有什么改变了,尽管可能很难追踪。你知道哪一行触发了弹出窗口吗?是Application.Run() 还是Application.Save()?您可以尝试将.Save()Application 对象移动到工作簿对象,并且可能使用SaveAs() 而不是Save(参见:stackoverflow.com/q/14634453/4996248)。已经一年多了。您可以编辑此问题,也可以提出一个新问题,说明为什么工作了一年的东西突然停止工作。
  • 是的,它是 Application.Run(),所以 python 程序卡在那里,直到我关闭错误窗口
  • 您能否修改Insert_Column 宏中的VBA 代码(它必须是保存文件),还是您无法控制?如果是后者,也许一种解决方法是让 Python 在调用 Application.Run() 之前删除具有给定名称的文件(假设删除此文件是安全的,它可能会被覆盖无论如何. 唯一要检查的是确保您正在运行的子程序在覆盖之前不使用该文件。)
  • 将产生错误,它是测试的一部分,但整个目标是让 python 静默运行 excel 宏。我假设如果没有生成 vba 弹出窗口,我的代码将继续运行,然后我可以杀死整个 excel.exe
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多