我正在尝试创建一个包含如下值的多维数组: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
吗?
我错过了一些明显的东西吗?感谢您的任何帮助/想法。
答案 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.