多维数组(1到#) - Lbound显示为0,而不是1?

时间:2015-08-31 18:44:40

标签: excel-vba multidimensional-array vba excel

我正在尝试创建一个包含如下值的多维数组:theArray(1,0) = "Batman"theArray(1,1) = "Gotham"

我有这样的设置(只是为了让他们的0点上的超级英雄一起来:

Sub deleteme()
Dim i As Integer
Dim firstArray() As Variant
ReDim firstArray(1 To 5)

firstArray = Array("Batman", "Superman", "Joker", "Rorschach", "Dr. Manhattan")

Dim theArray() As Variant
ReDim theArray(1 To 5, 1)
For i = LBound(firstArray) To UBound(firstArray)
    theArray(i, 1) = firstArray(i) ''' ERROR THROWN HERE
    Debug.Print theArray(i, 1)
Next i

End Sub

然而,当它到达theArray(i,1)...时,我收到了错误

  

运行时错误' 9':下标超出范围

我可以看到原因 - 因为LBound(firstArray)等于0。因此,我尝试将theArray(0,1)设置为某个值,但theArray(0,#)并不存在!我理解这一点。

虽然我认为LBound等于0,但我认为它是1? LBound()总是与数组一起成为0吗?

我错过了一些明显的东西吗?感谢您的任何帮助/想法。

3 个答案:

答案 0 :(得分:3)

默认情况下,数组是从0开始的,但您明确将theArray设置为1。有两个选项,第一个是ReDim theArray(0到4,1):

Option Explicit

Sub deleteme()
Dim i As Integer
Dim firstArray() As Variant
ReDim firstArray(0 To 4)

firstArray = Array("Batman", "Superman", "Joker", "Rorschach", "Dr. Manhattan")

Dim theArray() As Variant
ReDim theArray(0 To 4, 1)
For i = LBound(firstArray) To UBound(firstArray)
    theArray(i, 1) = firstArray(i) ''' ERROR THROWN HERE
    Debug.Print theArray(i, 1)
Next i

End Sub

另一种是将Option Base 1设置在顶部,如下所示:

Option Explicit
Option Base 1

Sub deleteme()
Dim i As Integer
Dim firstArray() As Variant
ReDim firstArray(1 To 5)

firstArray = Array("Batman", "Superman", "Joker", "Rorschach", "Dr. Manhattan")

Dim theArray() As Variant
ReDim theArray(1 To 5, 1)
For i = LBound(firstArray) To UBound(firstArray)
    theArray(i, 1) = firstArray(i) ''' ERROR THROWN HERE
    Debug.Print theArray(i, 1)
Next i

End Sub

选择其中一个,不要两个都做。

答案 1 :(得分:2)

Option Base 1添加到脚本的开头:

Option Base 1

Sub deleteme()
Dim i As Integer
Dim firstArray() As Variant
ReDim firstArray(1 To 5)

firstArray = Array("Batman", "Superman", "Joker", "Rorschach", "Dr. Manhattan")

Dim theArray() As Variant

ReDim theArray(1 To 5, 1)
For i = LBound(firstArray) To UBound(firstArray)
    theArray(i, 1) = firstArray(i) ''' ERROR THROWN HERE
    Debug.Print theArray(i, 1)
Next i

End Sub

答案 2 :(得分:0)

当你设置 firstArray=Array("Batman","Superman","Joker","Rorschach","Dr.Manhattan"),它创建了一个数组(右侧)并将firstArray设置为它。默认情况下,数组在创建时基于0(除非您使用此线程上其他注释引用的Option Base 1等选项)。设置等于Array之前的Lbound(firstArray)等于1.如果单独设置每个firstArray元素(firstArray(1)="Batman",firstArray(2)="Superman"等),则lbound(firstArray)将为1.