为此已经把我的头从桌子上敲了几个小时,并且已经在互联网上搜索了我们的chuff,所以如果我错过了一个明显的解决方案,请道歉......
我有 2 个功能:
Public Function DictFromRanges(rKeys As Range, rValues As Range) As Scripting.Dictionary
Debug.Assert (rKeys.Columns.Count = rValues.Columns.Count)
Dim rRetDict As Scripting.Dictionary
Set rRetDict = New Scripting.Dictionary
' loop through ranges adding values from rValues with keys from rKeys
Dim iKey As Integer
For iKey = 1 To rKeys.Columns.Count
rRetDict(rKeys.Columns(iKey).Value) = rValues.Columns(iKey).Value
Next iKey
' set return value
Set DictFromRanges = rRetDict
End Function
Public Function MinTurnsToKill(dictAttack As Scripting.Dictionary, iHealth As Integer) As Integer
MinTurnsToKill = iHealth
End Function
如果我在电子表格的单元格中执行以下操作:
=MinTurnsToKill(DictFromRanges(F2:L2,F3:L3),100)
当我在调试器中单步执行 DictFromRanges() 时,它似乎工作正常。
MinTurnsToKill() 是导致我大脑错误的那个 - 显然它是空的,但它甚至没有被调用(我最初有代码,但我把它全部拿出来只是为了确认它是否被调用)。
为了进一步测试发生了什么,我编写了 2 个代理函数:
Public Function Proxy(rKeys As Range, rValues As Range) As Variant
Dim dict As Scripting.Dictionary
Set dict = DictFromRanges(rKeys, rValues)
Proxy = MinTurnsToKill(dict, 42)
End Function
Public Function ProxyToo(rKeys As Range, rValues As Range) As Variant
ProxyToo = MinTurnsToKill(DictFromRanges(rKeys, rValues), 42)
End Function
当从 excel 电子表格中的单元格按如下方式调用时,它们都可以正常工作(即都打印 42):
=Proxy(F2:L2,F4:L4)
=ProxyToo(F2:L2,F4:L4)
因此,看起来 excel 只是拒绝将返回的字典从 DictFromRanges() 传递到 MinTurnsToKill() 如果它们用于位于电子表格实际单元格内的评估引擎中。
事实上,当我在电子表格单元格中执行以下操作时,它几乎就像拒绝承认 MinTurnsToKill() 甚至存在:
=MinTurnsToKill(DictFromRanges(F2:L2,F3:L3),100)
我认为必须有一种方法可以让 excel 发挥得很好,如果有人能告诉我怎么做,我将非常感激:)
干杯,
亚历克斯