我正在尝试使用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
是一个数组,其长度可以由通过InputBox运行宏的用户定义。代码工作正常,除非输入的numRows
值为1,否则会出现"类型不匹配错误"。
错误导致行For i=1 to UBound(Badger)
突出显示,错误消息框显示"类型不匹配"。
我猜测对于1乘1的数组,数据只是存储为字符串而不是数组,并且该数组的函数类似于Ubound()
和数组索引语法,如{{1不工作。是这样的吗?有没有办法强制它将变量识别为数组?
答案 0 :(得分:4)
如果只从该范围读取一个值,则变体不会创建数组,这就是为什么在尝试索引时会出现类型不匹配的原因。尝试检查Badger
是否为IsArray(Badger)
的数组。我使用它时,下面的代码可以使用:
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
If IsArray(Badger) Then
For i = 1 To UBound(Badger)
MsgBox (Badger(i, 1))
Next
Else
MsgBox Badger
End If
End Sub