我知道可以使用Value
将Excel范围中的所有值获取到数组中属性:
Dim arr As Variant
arr = ActiveSheet.UsedRange.Value
Debug.Print TypeName(arr)
' prints Variant()
但是,当我尝试迭代范围内的行时(通过 Rows
属性),并类似地分配 Value
到 Variant
,我得到一个文本分隔的字符串:
Dim row As Range
For Each row In ActiveSheet.UsedRange
arr = row.Value
Debug.Print TypeName(arr)
Exit Sub
Next
' prints String
不确定这是否相关,但 VBA IDE 报告 row
的类型如Range/Range
,以及 ActiveSheet.UsedRange
的类型如Variant/Object/Range
。 TypeName
在这两种情况下都会返回 Range
.
为什么会有所不同,我怎样才能获得第一个行为?
(我知道我可能可以 Split
将字符串放入数组中,但我不想这样做。)
最佳答案
您不是在行中循环,而是在单元格中循环。
因此,TypeName 将返回第一个单元格中值的数据类型。
如果将代码更改为此,则 arr 将是 Variant() 类型。
Dim row As Range
For Each row In ActiveSheet.UsedRange.Rows
arr = row.Value
Debug.Print TypeName(arr)
Exit Sub
Next
关于excel - 在 Rows 集合上使用 For Each 时,将行值作为字符串复制到 Variant 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66328310/