VB:类型不匹配错误,数组尺寸1x1

时间:2014-03-17 22:52:11

标签: 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

我的目标是使Badger是一个数组,其长度可以由通过InputBox运行宏的用户定义。代码工作正常,除非输入的numRows值为1,否则会出现"类型不匹配错误"。

错误导致行For i=1 to UBound(Badger)突出显示,错误消息框显示"类型不匹配"。

我猜测对于1乘1的数组,数据只是存储为字符串而不是数组,并且该数组的函数类似于Ubound()和数组索引语法,如{{1不工作。是这样的吗?有没有办法强制它将变量识别为数组?

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