使用xlwings从EXCEL sub到python的调用工作正常但是通过VBA函数触发这个相同的VBA会产生以下错误:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "c:\users\a112833\google drive\mytechtests\pulp\mymodule.py", line 13, in energySystemSimulator
wb = Workbook.caller()
File "C:\Python27\lib\site-packages\xlwings\main.py", line 233, in caller
xl_app, xl_workbook = xlplatform.get_open_workbook(fullname, hwnd=sys.argv[4])
File "C:\Python27\lib\site-packages\xlwings\_xlwindows.py", line 142, in get_open_workbook
duplicate_fullnames = get_duplicate_fullnames()
File "C:\Python27\lib\site-packages\xlwings\_xlwindows.py", line 124, in get_duplicate_fullnames
for xl_app in get_xl_apps():
File "C:\Python27\lib\site-packages\xlwings\_xlwindows.py", line 96, in get_xl_apps
xl_app = get_xl_app_from_hwnd(hwnd)
File "C:\Python27\lib\site-packages\xlwings\_xlwindows.py", line 73, in get_xl_app_from_hwnd
return disp.Application
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 522, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.Application
这有效:
Sub eSS()
RunPython ("import mymodule; mymodule.eSS()")
End Sub
这打破了上面的追溯(忽略fn。参数):
Function fnESS(x As Double, y As Double) As Double
Call eSS
fnESS = ActiveWorkbook.Sheets("Config").Range("T10")
End Function
我使用VBA子或函数子调用检查了呼叫签名似乎完全相同。我无法看到导致错误的原因。
答案 0 :(得分:0)
在编写用户定义函数时,您会看到一个常见的陷阱:Excel只允许您写入调用单元格,而不是写入调用单元格。这确实是Excel的限制。
xlwings可能会为这一天提供解决方法,但是现在,没有官方支持。
作为旁注:您可能最好通过使用xlwings装饰器来编写UDF(至少如果您只使用Windows),请参阅here。