如何用UBound <LBound制作VB6变体数组?

Bob*_*man 2 arrays vb6 variant

我试图摆脱对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)
Run Code Online (Sandbox Code Playgroud)

我原以为“下标超出范围”或类似的内容,但是我却得知LBound为0,UBound为-1。

那么,如何创建具有LBound 0和UBound -1的Variant数组?

我试过只使用未初始化的变体数组:

Dim K() as Variant
MsgBox LBound(K) & ", " & UBound(K)
Run Code Online (Sandbox Code Playgroud)

但是,当然,正如我所期望的那样,这会使“下标超出范围”。删除未初始化的数组也是如此:

Dim K() as Variant
Erase K
MsgBox LBound(K) & ", " & UBound(K)
Run Code Online (Sandbox Code Playgroud)

与擦除初始化数组一样:

Dim K() As Variant
ReDim K(0 To 0)
Erase K
MsgBox LBound(K) & ", " & UBound(K)
Run Code Online (Sandbox Code Playgroud)

我还尝试过仅将其重新设置为0和-1,这看起来很奇怪:

Dim K() As Variant
ReDim K(0 To -1)
MsgBox LBound(K) & ", " & UBound(K)
Run Code Online (Sandbox Code Playgroud)

但这也使“下标超出范围”。

在网络上闲逛了一会,我发现了以下技巧:

Dim K() As String
K = Split(vbNullString)
MsgBox LBound(K) & ", " & UBound(K)
Run Code Online (Sandbox Code Playgroud)

这实际上确实给出了一个带有LBound 0和UBound -1的数组!不幸的是,这是一个String数组,而我需要一个Variant数组。我不能很好地将字符串从一个数组单独复制到另一个数组的Variants中,因为0到-1以及所有。

有谁知道如何在不使用SCRRUN.DLL的情况下使用LBound 0和UBound -1制作这样的数组Variant()?最好也只使用内置的VB6东西,但是如果允许使用某些外部东西(SCRRUN.DLL除外),那么如果您可以这样做,我会很高兴。谢谢。

Hol*_*per 5

您可以使用以下Array功能:

Dim K()
K = Array()
MsgBox UBound(K)
Run Code Online (Sandbox Code Playgroud)