arrays - 将单个值加载到 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
以重新路由代码,以防只有一个值要加载,但是也许有更优雅的方法来处理这个?我在使用数组方面的经验并不丰富,所以也许你们可以指导我一点?
转置单值数组不是那样工作的,对吧?
解决方案
检查它是数组还是退出。
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
推荐阅读
- unit-testing - 当测试文件被定义为模块时,使用堆栈调用的 hspec 定义的测试会引发错误
- excel - 当单元格仍在调整大小范围内时,保留数据的文本更改
- javascript - 当子道具动态变化时,对象作为 React 子对象无效
- javascript - 如何在node.js中将json数组数据插入mysql?
- c - 在结构内的指针上使用 free() 可以为整个结构释放内存
- python - 如何打开 Firefox 并将新配置文件设置为默认配置?(硒和 Python)
- python-3.x - 在 ubuntu 18.04 上恢复 python3.6
- tensorflow - 如何将学习从 tensorflow 1.14 转移到 tf 2?
- string - 用户输入字符串的数值
- vb.net - 替换文件中的所有回车符