【发布时间】:2014-03-17 22:52:11
【问题描述】:
我正在尝试使用 Variant 数据类型来存储字符串数组。这是我正在使用的代码示例。
Sub Selecto()
Dim numRows As Integer
Dim Badger As Variant
numRows = InputBox("How many rows?", "Rows",0)
Badger = Range("C21:C"& 21 -1 + numRows).Value
For i = 1 To UBound(Badger)
MsgBox (Badger(i, 1))
Next
End Sub
我的目标是使Badger 成为一个数组,其长度可以由用户通过输入框运行宏来定义。代码工作得很好,除非输入的numRows 的值为 1,它会吐出“类型不匹配错误”。
错误导致For i=1 to UBound(Badger) 行突出显示,错误消息框显示“类型不匹配”。
我猜测对于 1×1 数组,数据只是存储为字符串而不是数组,并且像 Ubound() 这样的数组函数和像 Badger(i,1) 这样的数组索引语法不起作用.是这样吗?有没有办法强制它将该变量识别为数组?
【问题讨论】:
-
您的数组不应该以 0 而不是 1 开头
-
如果 numRows=1 那么你不会得到一个数组,而是一个值。如果 numRows>1 那么你得到一个基于 1 的二维数组,所以你需要将你想要获取值的维度传递给 UBound。所以:
UBound(Badger,1)将为您提供数组中的“行”数。此外,您可能通过使用 vb.net 标记您的问题无意中造成了一些混乱... -
感谢 VB.NET 标签的提醒,Tim。
标签: arrays vba dimensions type-mismatch