我正在尝试使用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 x 1数组,数据只是存储为字符串而不是数组,并且像Ubound()这样的数组函数和像Badger(i,1)这样的数组索引语法都不起作用。是这样吗有没有一种方法可以强制其将变量识别为数组?

最佳答案

如果从范围中仅读取一个值,则该变体不会创建一个数组,这就是为什么在尝试对其进行索引时会出现类型不匹配的原因。尝试检查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

关于arrays - VB : Type Mismatch Error,阵列尺寸1x1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22467075/

10-12 04:34