我正在努力运行通过xlwings激活的vba宏。

我的宏是保存在ThisWorkbook区域,而不是模块中。当我用类似的方法将宏保存在一个模块中时,它可以正常工作。

PythonScript 打开工作簿并运行模块。 然后,它试图运行工作簿不同标签中的另一个宏。

import xlwings as xw 
wb = xw.books.open(‘myworkbook’)
ExcelMacro = wb.macro(‘1stmacro’)
ExcelMacro()

#1stmacro位于一个模块中。#这就可以了。

ExcelMacro = wb.macro(‘ThisWorkbook.2ndmacro’)
ExcelMacro()

#第2个宏位于ThisWorkbook中,而不是模块。全名是ThisWorkbook.2ndMacro,其中第2个宏的形式是2ndMacro_Click。 用于激活的按钮与工作簿打开时的标签不同。

当我把工作簿保存在这个按钮所在的地方打开时,它可以工作;当它保存在除此以外的其他标签上时,它不能工作。

如果有任何帮助,我们将不胜感激。

1 个评论
能否请您测试一下我的解决方案,如果可行,请加注并接受该答案?谢谢你 :)
python
excel
vba
xlwings
newtothis
newtothis
发布于 2020-10-26
2 个回答
Kamil
Kamil
发布于 2020-10-26
已采纳
0 人赞同

另一个解决方案。

假设你在Documents文件夹中保存了名为book1.xlsm的电子表格(当然,你可以改编)。

import xlwings as xw
spreadsheet_path = 'C:\\Users\your_user\\Documents\\book1.xlsm'
wb = xw.books.open(spreadsheet_path)
ExcelMacro = wb.macro('Sheet1.message1')
ExcelMacro()
ExcelMacro = wb.macro('Sheet2.message2')
ExcelMacro()
ExcelMacro = wb.macro('Module1.hello_from_module1')
ExcelMacro()

我得到了所有的宏,无论哪个标签打开都能工作。你必须把整个readsheet_path。

祝你好运😊,如果这样还不能解决你的问题,请告诉我。

再次感谢你。让我提供一些更多的信息。不工作的宏是由一个标签上的按钮的点击事件激活的。我已经进一步调查了代码。它只有在excel实际在这个标签上时才能正常工作(我不能改变这个事实)。
也许这是一个excel版本的问题。我在2019/365上测试了它。在这两种情况下,我都得到了所有宏的调用,而没有切换激活的工作表。你确定你包括工作簿的完整路径吗?
Kamil
Kamil
发布于 2020-10-26
0 人赞同

是否有必要从本工作簿而不是任何模块中调用宏?