首页 > 解决方案 > 将单个值加载到 VBA 数组

问题描述

我一直在 Excel 2016 中运行 VBA 代码,该代码将一堆值从单列 Excel 表加载到数组中,然后对每个值运行 FOR 循环。

Sub Load_array()

Dim x As Long
Dim myArray() As Variant
Dim myTable As ListObject

Set myTable = Sheets("Sheet1").ListObjects("Table1")
TempArray = myTable.DataBodyRange.Columns(1)

myArray = Application.Transpose(TempArray)

For x = LBound(myArray) To UBound(myArray)

Range("A1").Value = myArray(x)

Next x

End Sub

工作正常,直到我发现一个“错误”。如果该 DataBodyRange 中只有一行,我会收到错误消息:

myArray = Application.Transpose(TempArray)

“运行时错误‘13’:类型不匹配”

我可以使用基于工作表的 ExcelCOUNTA公式并添加IF-clause以重新路由代码,以防只有一个值要加载,但是也许有更优雅的方法来处理这个?我在使用数组方面的经验并不丰富,所以也许你们可以指导我一点?

转置单值数组不是那样工作的,对吧?

标签: arraysvba

解决方案


检查它是数组还是退出。

Sub Load_array()

Dim x As Long
Dim myArray() As Variant
Dim TempArray
Dim myTable As ListObject

Set myTable = Sheets("Sheet2").ListObjects("Table1")
TempArray = myTable.DataBodyRange.Columns(1)
If Not IsArray(TempArray) Then '<~~ Check array
    Range("a1") = TempArray
    Exit Sub
End If

myArray = Application.Transpose(TempArray)

For x = LBound(myArray) To UBound(myArray)

    Range("A1").Value = myArray(x)

Next x

End Sub

推荐阅读