"无效的限定符" array.Contains错误

时间:2018-01-10 19:17:11

标签: excel vba

我的父亲想在Excel中使用宏,但是对于那种问题,他需要Visual Basic。我决定帮助他,但我从来没有写过Visual Basic代码,所以我有点把代码放在互联网论坛和mnsd上,但后来我遇到了这个问题而且我不知道如何解决它。 / p>

    Dim strArray() As String
    Dim TotalRows As Long
    Dim i As Long

    TotalRows = Rows(Rows.Count).End(xlUp).Row
    ReDim strArray(1 To TotalRows)

    For i = 2 To TotalRows
        If Not strArray.Contains(Cells(i, 1).Value) Then
            strArray(i) = Cells(i, 1).Value
        End If
    Next

这只是代码的一部分,但这是错误。 它显示错误

  

"无效的限定符"

并在strArray中突出显示strArray.Contains(Cells...。我无法解决,所以我在这里问。我认为有一个非常简单的解决方案,但我无法在线找到它。

感谢您的建议 托马斯

2 个答案:

答案 0 :(得分:2)

变量strArray是一个类型字符串的普通数组,而不是List或其他对象,所以它没有"包含"方法你必须做的事情如下:

Dim strArray() As String
Dim TotalRows As Long
Dim i As Long

TotalRows = Rows(Rows.Count).End(xlUp).Row
ReDim strArray(1 To TotalRows)

For i = 2 To TotalRows
    Dim x As Long
    Dim contains As Boolean
    contains = False
    For x = LBound(strArray) To UBound(strArray)
        If strArray(x) = Cells(i, 1).Value Then
            contains = True
        End If
    Next
    If Not contains Then
        strArray(i) = Cells(i, 1).Value
    End If
Next

请注意,Lbound和Ubound将获取数组的上限和下限,因为您可以更新数组。您也可以使用1到TotalRows,因为您已经知道"数组的大小,但由于我不知道你的实际代码有多复杂,所以我包括Lbaound和Ubound,以防你在实际代码中需要它们。

答案 1 :(得分:1)

VBA中没有.Contains方法。

使用具有.Exist功能的Dictionary对象来检查密钥是否存在,您可以实现相同的目标。

Dim objDict As Object
Set objDict = CreateObject("Scripting.Dictionary")
Dim TotalRows As Long
Dim i As Long

TotalRows = Rows(Rows.Count).End(xlUp).Row

For i = 2 To TotalRows
    If Not objDict.Exists(Cells(i, 1).Value) Then
        objDict.Add Cells(i, 1).Value, vbNullString
    End If
Next