将Array中的项目与VB6中Variant中的项目进行比较

时间:2015-06-03 18:12:48

标签: arrays vba vb6 variant

我在VB6中有一个包含数千个字符串的Variant。

我也有一个固定长度的数组。

我需要比较每个内容并添加与列表匹配的内容。

if array(i) = variant(1,i) then
'add to list
End if

我无法弄清楚如何正确地迭代这两个以便进行比较,因为我用来迭代Variant()的方法在遍历每个项目后停止。因此,它永远不会检查是否有任何项目等于数组中的i + 1.

Private Sub dp_Click()
    Dim fArray
    fArray = Array("a", "b", "c")

    LstAPens.ListItems.Clear
    LstUPens.ListItems.Clear

    For x = 0 To UBound(fArray)
        Dim i As Long,  m As Integer

        'Do Until batcharray(0, i) = "End"
        '   tmpArray(i) = UCase(batcharray(1, i))
        'Loop

        Do Until batcharray(0, i) = "End"
            If (InStr(1, UCase(batcharray(1, i)), UCase(fArray(x))) > 0) Then
                LstAPens.ListItems.Add
                    With LstAPens.ListItems(m + 1)
                     .SubItems(1) = batcharray(1, i) 'Tagname
                    End With
                    m = m + 1
            End If
            i=i+1
        Loop
    Next x
End Sub

我尝试将Variant转换为数组,但它不起作用。

找到的唯一项目是数组中的第一个项目,然后Variant在到达结尾时不再迭代。

如何在此示例中迭代名为batchArray的Variant,并将其与数组的内容进行比较?

1 个答案:

答案 0 :(得分:4)

这实际上不是 1,000 5% 问题,它只是一个循环/控制变量问题。

即使您的主循环中有您的DIM语句,VB也不会将其视为"重新声明"并在UNTIL循环之前重置/重新初始化其值。结果,'我'将增加到1,然后在外部循环的迭代之间保留其值,从而保持在batchArray中的单个值上,并且迭代停止。

将声明移到循环之外,在Variant循环之前将其重置为0,看看是否能解决问题:

UNTIL