【问题标题】:How to run VBA macro in win32 when used as a variable用作变量时如何在win32中运行VBA宏
【发布时间】:2021-04-27 09:28:21
【问题描述】:

我正在编写一个脚本,它打开一个 Excel 工作表并输入一些数据并运行一个 VBA 宏。

import os
import win32com.client
import glob

xl=win32com.client.Dispatch("Excel.Application")
working_dir = os.getcwd()

path = os.path.join(working_dir, 'folder')
file_list = glob.glob(path + '/*.xls*')
for file in file_list:
    file_name = str(file)
    wb = xl.Workbooks.Open(file_name)
    wb.Worksheets("sheet1").Activate()
    ws = wb.Activesheet.Name
    ws1 = wb.Worksheets(ws)
    ws1.Range("E5").FormulaR1C1 = "add_text_here"
    xl.Goto(ws1.Range('E5'))
    xl.Run("excel_sheet.xls!macro")
    wb.Close(SaveChanges=True)
    xl.Quit()

我能够正确运行此脚本。我遇到的问题是,当我将运行宏更改为从如下变量中读取时。

xl.Run(file_name+"!macro") # here I changed file name to a variable

我明白了

此工作簿中的宏可能不可用,或者所有宏都可能被禁用。", 'xlmain11.chm', 0, -2146827284), None)

错误。

我真的需要这样做,因为我不想给 Excel 文件名硬编码,而且这个 Excel 文件可能会改变。请帮帮我。

【问题讨论】:

  • 由于您使用file_name 打开文件xl.Workbooks.Open(file_name),因此它看起来必须包含整个路径,包括文件名,而不仅仅是xl.Run("excel_sheet.xls!macro") 中的文件名,请检查@ 的值987654326@ 如果它包含路径重命名您的变量,因此很明显它不包含文件名,而是包含路径和文件名。误导性变量名称通常是导致错误的原因。 • 然后确保您只使用xl.Run 的文件名(不带路径)。
  • 简单的方法是使用xl.Run(wb.Name+"!macro")
  • @Pᴇʜ,你是对的文件名包含路径。我不知道 xl.run 应该只包含没有路径的文件名。感谢您的澄清。
  • @АлексейР 谢谢这解决了我的问题。谢谢你们俩帮助我。我真的被困在这条线上了。
  • @АлексейР 看起来这是完美的解决方案。您为什么不将其发布为 anwser?

标签: python vba winapi


【解决方案1】:

简单的方法就是使用

xl.Run(wb.Name+"!macro")

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多