伙计们,我已经搜索了几天,找不到解决这个问题的方法。以下是我试图做的:
以下是我迄今为止所做的工作:
以下代码适用于特定工作表上的表单控件-我使用xlwings
附带的RunPython
模块执行,并按预期工作:
def fill_name_cb():
WS_MAIN = xw.Book("Assessment.xlsm").sheets['Assessment']
cb = WS_MAIN.shapes("cbNames").api.ControlFormat
cb.RemoveAllItems()
for name in ATTR_DICT["names"]: # This is filled in elsewhere, and resolves to a list of names
cb.AddItem(name)
cb.ListIndex = 1
这很好用
现在,我需要对UserForm上的combobox执行类似的操作,我正在尝试找出如何填充该combobox。我不知道如何引用UserForm,更具体地说,是该UserForm上的combobox。我假设在Python中是这样的:
cb = xw.Book("Assessment.xlsm").userform("frmForm").Control("cbxNames")
我尝试了几种不同的方法,但是我没有找到有效的组合
仅供参考:我确实找到并尝试了this。第一个答案建议将引用传递给对象(combobox或userform)。我试图这样做:
Dim cbo As ComboBox
Set cbo = cbxListOfNames
RunPython ("import helpers; helpers.fill_user_name_cbx('" & cbo & "')")
相应的Python脚本是:
def fill_user_name_cbx(cbx):
cbx.AddItem("New name")
该解决方案成功地将其添加到Python脚本中(我在执行的cbx.AddItem
行之前添加了另一行),但随后出现了cbx.AddItem("New name") AttributeError: 'str' object has no attribute 'AddItem'
错误
这告诉我没有传递对象引用,只是传递对象名称的字符串
有人知道如何做到这一点吗?谢谢你的帮助
目前没有回答
相关问题 更多 >
编程相关推荐