首页 > 解决方案 > 使用 xlwings 从本工作簿调用 vba 宏

问题描述

我正在努力运行通过 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()

#2nd 宏位于 ThisWorkbook 而不是 Module。全名由 ThisWorkbook.2ndMacro 给出,其中第二个宏采用 2ndMacro_Click 形式。用于激活此功能的按钮包含在与打开工作簿的选项卡不同的选项卡中。

当我保存工作簿以打开此按钮所在的位置时,它可以工作;当它保存在除此之外的其他选项卡上时,它不起作用。

任何帮助将不胜感激!

标签: pythonexcelvbaxlwings

解决方案


是否有必要从此工作簿而不是任何模块调用宏?如果可以的话,使用有效的方法总是更安全,而不是考虑变通方法。

由于带有宏的工作簿无论如何都与.xlsm.xlsb扩展一起保存,因此应该没有什么可以阻止您在其中插入模块。

alt+F11,在左上角右键单击“此工作簿”,然后选择插入、模块。

模块将被创建,您可以复制粘贴甚至拖放宏。

如果这不可能,现在让我来。


推荐阅读