use*_*878 5 arrays vba dimensions type-mismatch
我试图使用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
Run Code Online (Sandbox Code Playgroud)
我的目标是使它成为Badger
一个数组,其长度可以由通过InputBox运行宏的用户定义.代码工作正常,除非numRows
输入的值为1,它会吐出"类型不匹配错误".
该错误导致该行For i=1 to UBound(Badger)
突出显示,错误消息框显示存在"类型不匹配".
我猜测对于一个1乘1的数组,数据只是存储为一个字符串而不是一个数组,并且该数组函数Ubound()
和数组索引语法一样Badger(i,1)
不起作用.是这样的吗?有没有办法强制它将变量识别为数组?
小智 5
如果仅从范围中读取一个值,则该变体不会创建数组,这就是为什么在尝试对其进行索引时会出现类型不匹配的原因。尝试检查是否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
Run Code Online (Sandbox Code Playgroud)