excel - 在 Rows 集合上使用 For Each 时,将行值作为字符串复制到 Variant 中

标签 excel vba

我知道可以使用Value将Excel范围中的所有值获取到数组中属性:

Dim arr As Variant
arr = ActiveSheet.UsedRange.Value
Debug.Print TypeName(arr)
' prints Variant()

但是,当我尝试迭代范围内的行时(通过 Rows 属性),并类似地分配 ValueVariant ,我得到一个文本分隔的字符串:

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/RangeTypeName在这两种情况下都会返回 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/

相关文章:

excel - Excel 图表上的动态系列选择

vba - 数据更改时自动刷新数据透视表

sql - 如何共享具有 SQL 查询连接的 Excel 文件

excel - 在 Excel VBA 中选择随机名称时排除计数器编号

excel - 从变量命名工作表

excel - 如何解锁图表并禁止切割?

c++ - 如何从无法注册到函数向导的 xll 加载项调用函数?

.net XSLT 创建工作表

vba - 字符串中的通配符

excel - 将前 3 个字符更改为粗体格式