创建一个空数组

时间:2018-02-14 19:13:49

标签: arrays vba

受到this question答案的启发,我为空数组创建了 factory 。它通常有效,但有时它不起作用。使用该帖子中描述的技术创建的数组,在ReDim之后编辑并且为其元素分配了一些值,从某些观点看似破坏,从其他观点看似正确。

例如在我的实际代码中,我在Locals窗口中看到其元素中的所有正确值,我在Watch窗口看到<Variable uses an Automation type not supported in Visual Basic>,我在某些函数的所有元素上看到了正确的值,我看到了其他功能上只有几个正确的值。例如,如果F1()创建数组并将其传递给F2(),则F1会看到所有值,但F2只看到其中的一些,而其他值似乎是空(在这种情况下是字符串)。

我无法在小片段中重现相同的完全相同的行为,但我在下面的代码中重现了类似的内容。这里的不良行为与我上面描述的相反:它适用于代码而且它不在Locals窗口中。

我认为解决此问题的方法也可以解决实际应用问题。

立即窗口的输出是正确的:

enter image description here

Watch窗口的输出失败:

enter image description here

“本地”窗口的输出错误:

enter image description here

以下是代码:

Private Declare Sub GetMem2 Lib "msvbvm60" (src As Any, dest As Any)

Sub Test()
  Dim S() As String, I As Integer
  S = NewArrayString
  ReDim Preserve S(9)
  For I = 0 To 9
    S(I) = String(I + 1, "x")
  Next I
  For I = 0 To 9
    Debug.Print I; S(I)
  Next I
  Stop
End Sub

Function NewArrayString() As String()
  Dim V As Variant, NewTypeCode As Integer
  V = Array()
  NewTypeCode = vbArray Or vbString
  GetMem2 NewTypeCode, V
  NewArrayString = V
End Function

0 个答案:

没有答案