我正在开发一个Excel VBA插件,用于与COM服务器交换对象,类似于以下内容:
获取数组效果很好:如果数组包含对象,则按预期工作,如果数组为空,则
发送数组仅适用于非空数组,因为我不能
看起来像是
编辑(澄清下面的评论):执行此代码会崩溃,因为无法计算
但是,如果您将
看起来,调试器能够正确地初始化我需要的空数组,以便显示其值。
'get an array of objects
Dim Ents() As ISomething
ComObject.GetEntities Ents
'send an array with 10 objects
ReDim Ents(9)
Set Ents(0) = ...
...
ComObject.SetEntities Ents
获取数组效果很好:如果数组包含对象,则按预期工作,如果数组为空,则
UBound(Ents) = -1
并且一切都按预期工作。发送数组仅适用于非空数组,因为我不能
Redim Ents(-1)
,并且删除 VBA 和 COM 服务器中的数组都会崩溃:Debug.Print UBound(Ents)
在 VBA 中崩溃,并且谁知道会导致服务器崩溃。看起来像是
Erase
语句将数组变量定义/损坏而不是清空。编辑(澄清下面的评论):执行此代码会崩溃,因为无法计算
UBound
:Sub Test()
Dim Ents() As ISmartId
Debug.Print UBound(Ents)
End Sub
但是,如果您将
Ents
添加到监视窗口,然后设置断点到Debug.Print
行并执行,调试器会在类型列中显示ISmartId(0 to -1)
。之后,执行继续进行,而调试窗口显示了预期的-1
。看起来,调试器能够正确地初始化我需要的空数组,以便显示其值。
Split("")
。我需要一个适用于IAnything
的通用解决方案。这有助于您的想象力吗? - stenci