下标超出范围,数组variables
我是VBA的初学者,我一直在挠头,试图弄清楚我的代码有什么问题:
Sub DataTransfer(): Dim position As Integer, location (1 To 9) As String location(1) = "BC" location(2) = "Calgary" location(3) = "Edmonton" location(4) = "Major Projects" location(5) = "Minneapolis" location(6) = "Saskatchewan" location(7) = "Seattle" location(8) = "Toronto" location(9) = "Winnipeg" For position = 1 To 9 Worksheets(location(position)).Select Cells(1, 2).Value = location(position) Next position End Sub
编辑:对于我的问题的含糊不清。 我最终想要做的是实际上能够将第三条最后一行(将城市名称写入工作表)更改为我想要的任何函数,以便按照我认为合适的方式修改工作表。 这实际上是我开始解决问题的一个更大的子程序的一部分。 这些工作表是散布在其他工作表之间的,所以不幸的是,@ nutsch的解决scheme不会真正达到我想要的(但是要感谢任何一种方式)。
我遇到的最大的问题是,这个确切的代码有时会按预期工作,其他时间在第四行返回“下标超出范围”错误。
我假设你正在试图把工作表的名字放到它对应的工作表中? 如果是这样,问题是你正在使用Select
而不是Activate
给予Worksheet
焦点。
成为一个问题,因为您正在使用没有限定符的Cells
格,所以它引用了在您的代码中未被更改的ActiveSheet
。
两种解决scheme
- 使用
Activate
,这将使Cells
工作就像你想要的。 - 通过在表单对象之前确定对
Cells
的调用。
选项1
Sub DataTransfer(): Dim position As Integer, location(1 To 9) As String location(1) = "BC" location(2) = "Calgary" location(3) = "Edmonton" location(4) = "Major Projects" location(5) = "Minneapolis" location(6) = "Saskatchewan" location(7) = "Seattle" location(8) = "Toronto" location(9) = "Winnipeg" For position = 1 To 9 Worksheets(location(position)).Activate Cells(1, 2).Value = location(position) Next position End Sub
选项2
Sub DataTransfer(): Dim position As Integer, location(1 To 9) As String location(1) = "BC" location(2) = "Calgary" location(3) = "Edmonton" location(4) = "Major Projects" location(5) = "Minneapolis" location(6) = "Saskatchewan" location(7) = "Seattle" location(8) = "Toronto" location(9) = "Winnipeg" For position = 1 To 9 'this line really does nothign now Worksheets(location(position)).Select Worksheets(location(position)).Cells(1, 2).Value = location(position) Next position End Sub
我更喜欢选项2,因为它不需要先激活Worksheet
。 应尽可能避免激活和select。 他们放慢了速度,使代码与强健的相反。
最后,正如@nutsch所指出的那样,有更简单的方法来做同样的事情,但值得知道为什么你的代码不工作。
可能是工作表名称问题。 你有多less工作表,不需要更新? 你能做吗?
dim sht as worksheet for each sht in activeworkbook.sheets sht.cells(1,2)=sht.name next