我父亲想要Excel中的宏,但是对于这种问题,他需要Visual。我决定帮助他,但我从来没有写过Visual代码,所以我把这些代码从互联网论坛和mnsd收集起来,但是后来我遇到了这个问题,我不知道如何解决它。
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...
中的位置。我解决不了所以我在这里问。我认为有一个非常简单的解决方案,但我无法在网上找到它。
谢谢你的忠告托马斯
发布于 2018-01-10 19:33:06
变量strArray是一个类型为字符串的普通数组,而不是一个列表或其他对象,因此它没有一个“包含”方法,您必须这样做:
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,以防需要它们。
发布于 2018-01-10 19:32:05
在VBA中没有.Contains
方法。
您可以使用字典对象实现相同的功能,该对象具有.Exist
函数来检查键是否存在。
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
https://stackoverflow.com/questions/48194581
复制相似问题