提问人:Dima Bilan 提问时间:10/15/2023 最后编辑:ZygDDima Bilan 更新时间:10/15/2023 访问量:56
VBA 循环遍历数组字符串元素问题
VBA loop through array string element issue
问:
由于 Variant 数组的简单循环,我注意到如果值代码“SALA_1000”,编译器似乎看不到元素,因此条件 Element = prevElement 永远不会发生此值。这种行为的原因是什么?有趣的是,如果我将更改为Sala_1000,或SAla_1000或添加空间,它可以正常工作。Sala_1000 VBA 中有什么特别的含义吗?快照
数据:
编号 | 法典 |
---|---|
编号: A001 | HRLY_1001 |
编号: A002 | SALA_1000 |
编号: A003 | SALA_1000 |
编号 A004 | HRLY_1001 |
编号: A005 | SALA_1000 |
Sub CheckSome()
Dim fc As Range
Dim Tbl As Range
Dim DataArr() As Variant
Dim i As Long
Dim Element As String
Dim prevElement As String
Set fc = ThisWorkbook.Sheets("Sheet1").Cells.Find(What:="code")
Set Tbl = fc.CurrentRegion
'assign range data to array
DataArr = Tbl
'looping through array
For i = 1 To UBound(DataArr)
'make "key": ID & code & Amount
Element = CStr(DataArr(i, 1)) & CStr(DataArr(i, 2))
'check if Element = prevElement
If Element = prevElement Then
Debug.Print DataArr(i, 2)
Else
Debug.Print "ok"
End If
prevElement = Element
Next i
End Sub
答:
2赞
vbakim
10/15/2023
#1
由于 prevElement = Element 位于循环末尾,If Element = prevElement 条件中的 Debug.Print DataArr(i, 2) 语句可能无法按预期执行。 因为 Element = CStr(DataArr(i, 1)) & CStr(DataArr(i, 2)) 将新 ID 分配给“SALA_1000”。
为了查看 Debug.Print DataArr(i, 2) 的输出,我会将 Debug.Print 语句放在 prevElement = Element 行的上方。
Else
Debug.Print "ok"
End If
Debug.Print DataArr(i, 2)
prevElement = Element
Next i
End Sub
评论
& CStr(DataArr(i, 2))
CStr(DataArr(i, 1))
If Element = prevElement