首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >array.Contains中的“无效限定符”错误

array.Contains中的“无效限定符”错误
EN

Stack Overflow用户
提问于 2018-01-10 19:17:10
回答 2查看 663关注 0票数 1

我父亲想要Excel中的宏,但是对于这种问题,他需要Visual。我决定帮助他,但我从来没有写过Visual代码,所以我把这些代码从互联网论坛和mnsd收集起来,但是后来我遇到了这个问题,我不知道如何解决它。

代码语言:javascript
复制
    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

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

“无效限定符”

并高亮strArraystrArray.Contains(Cells...中的位置。我解决不了所以我在这里问。我认为有一个非常简单的解决方案,但我无法在网上找到它。

谢谢你的忠告托马斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-10 19:33:06

变量strArray是一个类型为字符串的普通数组,而不是一个列表或其他对象,因此它没有一个“包含”方法,您必须这样做:

代码语言:javascript
复制
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将得到数组的上、下界,这可能会更改,因为您可以对数组进行Redim。您也可以使用1来TotalRows,因为您“知道”数组的大小,但是由于我不知道实际代码有多复杂,所以我在实际的代码中包含了Lbaound和Ubound,以防需要它们。

票数 2
EN

Stack Overflow用户

发布于 2018-01-10 19:32:05

在VBA中没有.Contains方法。

您可以使用字典对象实现相同的功能,该对象具有.Exist函数来检查键是否存在。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48194581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档