我的父亲想在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...
。我无法解决,所以我在这里问。我认为有一个非常简单的解决方案,但我无法在线找到它。
感谢您的建议 托马斯
答案 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