我有一个函数调用:
Private Sub Worksheet_Calculate()
Debug.Print Now()
If check_data_required_is_present Then
Call d2s_caller
Else
End If
End Sub
d2s_caller是:
Sub d2s_caller()
Application.StatusBar = "Strike conversion"
RunPython ("import f_v; f_v.calc_s_callback()")
Application.StatusBar = ""
End Sub
当我删除要触发计算的数组时,我(通常会)得到以下错误:
---------------------------
Error
---------------------------
Press Ctrl+C to copy this message to the clipboard.
---------------------------
OK
---------------------------
看起来像这样:
有没有人经历过这个?这是xlwings的非线程安全方面吗?
excel会多次调用xlwings吗?
如果我在手动计算中,问题就会消失,但在自动状态下它会持续存在。
答案 0 :(得分:1)
无论如何我不是XlWings甚至是python专家,但我已经复制了你的错误。我从xlwings页面中获取了Fibonacci Sequence示例。
Sub Worksheet_Calculate()
If Sheet1.Range("A2").Value = 1 Then
Debug.Print Now()
RunFrozenPython ("fibonacci.exe")
End If
End Sub
首先通过简单的计算测试触发器,看看它是否有效。 在一个单元格中:
=1+1
这与预期一样有效。它触发python代码,一切都没有错误地执行。 如果我们强调一点,并要求python代码计算100个Fibonacci数字并将它们相加它将产生与你相同的错误。
=SUM(C:C)
我的猜测是Excel确实多次调用。可能在第一次调用完成之前调用xlwings存在一些问题。
您可以尝试使用Worksheet_Change,只使用一个单元格来最小化python调用。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A6")) Is Nothing Then
Debug.Print Now()
RunFrozenPython ("fibonacci.exe")
End If
End Sub