【发布时间】:2013-12-12 21:51:40
【问题描述】:
我正在尝试在 VB6 应用程序中摆脱对 SCRRUN.DLL 的依赖。它目前使用的其中一件事是它的 Dictionary 类。 Dictionary 类有一个 Keys 函数,它应该返回字典中的键数组。我做了一些实验,看看如果字典中没有键会发生什么:
Dim D As Dictionary
Set D = New Dictionary
Dim K() As Variant
K = D.Keys
MsgBox LBound(K) & ", " & UBound(K)
我期待“下标超出范围”或类似的东西,但我被告知 LBound 是 0 而 UBound 是 -1。
那么,如何创建一个 LBound 0 和 UBound -1 的 Variant 数组?
我试过只使用未初始化的变量数组:
Dim K() as Variant
MsgBox LBound(K) & ", " & UBound(K)
但正如我所料,这当然会引发“下标超出范围”。擦除未初始化的数组也是如此:
Dim K() as Variant
Erase K
MsgBox LBound(K) & ", " & UBound(K)
与擦除已初始化的数组一样:
Dim K() As Variant
ReDim K(0 To 0)
Erase K
MsgBox LBound(K) & ", " & UBound(K)
我还尝试将亮度调整为 0 和 -1,这可能看起来很奇怪:
Dim K() As Variant
ReDim K(0 To -1)
MsgBox LBound(K) & ", " & UBound(K)
但这也会导致“下标超出范围”。
在网上翻了一下,我发现了以下技巧:
Dim K() As String
K = Split(vbNullString)
MsgBox LBound(K) & ", " & UBound(K)
这实际上给出了一个 LBound 0 和 UBound -1 的数组!不幸的是,它是一个字符串数组,而我需要一个变体数组。我不能很好地单独将字符串从一个数组复制到另一个数组中的 Variants,因为,嗯,0 到 -1 等等。
有谁知道如何在不使用 SCRRUN.DLL 的情况下制作这样一个数组,即 LBound 0 和 UBound -1 的 Variant()?最好也只使用内置的 VB6 东西,但如果你可以使用一些外部的东西(除了 SCRRUN.DLL),我会全力以赴。谢谢。
【问题讨论】:
-
正如您在实验中所注意到的,您有时会遇到一个单元化数组,这会给您“下标超出范围”错误——这与一个已初始化但为空的数组不同。您可能还会发现此答案很有帮助:stackoverflow.com/a/444810/137646
-
+1 表示您的问题中显示了良好的研究