【发布时间】: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?