Python 可能的错误?xlwings无法运行Excel宏?

Python 可能的错误?xlwings无法运行Excel宏?,python,excel,macros,xlwings,vba,Python,Excel,Macros,Xlwings,Vba,我在让xlwings从Python运行宏时遇到问题。尽管遵循xlwings文档中的代码,但我无法让xlwings执行Excel宏。例如,在名为“Book.xlsm”的Excel工作簿中: 此宏在Excel中运行正常。但当我尝试从Python调用此模块时,它失败了: # in Python import xlwings wb = xlwings.Book('C:\\Book.xlsm') wb.macro('Test') print('done.') 没有错误消息。Python代码只是运行并结

我在让xlwings从Python运行宏时遇到问题。尽管遵循xlwings文档中的代码,但我无法让xlwings执行Excel宏。例如,在名为“Book.xlsm”的Excel工作簿中:

此宏在Excel中运行正常。但当我尝试从Python调用此模块时,它失败了:

# in Python
import xlwings

wb = xlwings.Book('C:\\Book.xlsm')
wb.macro('Test')
print('done.')
没有错误消息。Python代码只是运行并结束,打印消息“done”。但是当我检查工作表ABC时,什么都没有写。请注意,我可以连接到此工作簿并使用xlwings更改单元格值。我只是无法让它运行测试宏

还要注意的是,我以前使用过一个旧得多的xlwings(我想是0.7.0之前的版本),它运行宏时没有任何问题。我现在使用的是0.10.0版本。

请尝试以下操作:

在VBA中

Sub Test(number)
   Set ws = Worksheets("Hoja1")
   ws.Range("A1").Value = number
End Sub
python中的

import xlwings as xw
wb1 = xw.Book('Libro1.xlsm')    
macro=wb1.macro('Test')
macro(10)
print('done.')

从Python运行宏后是否保存工作簿?宏是在“ABC”工作表的命名空间中还是在工作簿的命名空间中?即它是否在VBA模块中?是的,测试子例程在VBA模块中。我希望我是对的。我打开VBA编辑器,然后选择工作簿名称下的插入模块。测试子例程位于模块1中,而不是任何工作表中。我尝试在Python中使用一个不存在的子例程名称(如“XYZ”),例如:wb.macro(“XYZ”),但我的代码仍然在运行和退出时没有任何错误消息。@Chris您真正的问题是
wb.macro
只映射VBA函数/宏,您需要单独调用它:
test=wb.macro('test')
,然后调用
test()
@FelixZumstein。太好了,谢谢。文件中是否提到了这一点?我不记得有文档要求我们调用/执行这样的宏。你能解释一下你的答案而不是把代码放在这里吗?代码很简单,很容易解释。Chris说得对,他的宏没有运行,也没有在单元格“A1”中打印值10。我想说的是,宏运行,但当它收到作为参数的值时。@Armando。作品缺点是在我的实际子例程(没有任何参数)中,我必须添加一个伪参数/未使用的参数,以便xlwings能够通过传递一些值作为参数来执行我的宏。但这在我的应用程序中是一件小事。再次感谢。@Armando这不必要。能否在GitHub问题中发布一个示例工作簿,以便我们能够正确解决此问题?谢谢:
import xlwings as xw
wb1 = xw.Book('Libro1.xlsm')    
macro=wb1.macro('Test')
macro(10)
print('done.')