从Excel VBA函数调用xlwings会产生错误

时间:2016-03-29 09:25:14

标签: python windows excel excel-vba xlwings vba

使用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子或函数子调用检查了呼叫签名似乎完全相同。我无法看到导致错误的原因。

1 个答案:

答案 0 :(得分:0)

在编写用户定义函数时,您会看到一个常见的陷阱:Excel只允许您写入调用单元格,而不是写入调用单元格。这确实是Excel的限制。

xlwings可能会为这一天提供解决方法,但是现在,没有官方支持。

作为旁注:您可能最好通过使用xlwings装饰器来编写UDF(至少如果您只使用Windows),请参阅here