vba:运行时错误'9'

May*_*a.R 1 excel vba excel-vba

当我想将6个工作簿中的单元格值从一张纸复制到另一张纸时(在我的情况下从"Sheet1"单元格(B9:E111)复制到"Sheet2")我站在错误的前面:'运行时错误9:下标超出范围'这是我写的代码:

Sub sbCopyRangeToAnotherSheet()

  For i = 1 To 6

     Workbooks(i).Worksheets("Sheet2").Range("A1").Value = Workbooks(i).Worksheets("Sheet1").Range("B9:E111").Value  

  Next i

End Sub
Run Code Online (Sandbox Code Playgroud)

愿有人可以帮助我吗?谢谢

Mat*_*don 5

"下标超出范围"意味着您正在访问超出其边界的阵列/集合.

Workbooks(i).Worksheets("Sheet2").Range("A1").Value = Workbooks(i).Worksheets("Sheet1").Range("B9:E111").Value  
Run Code Online (Sandbox Code Playgroud)

我在单个指令中计算了几个不同的地方可能会抛出该错误.拆分它.

Dim book As Workbook
' if it blows up here, check how many books you have open:
Set book = Workbooks(i) 'consider looping from 1 To Workbooks.Count instead of 1 To 6

Dim source As Worksheet
' if it blows up here, check the filename of the book and whether it has a "Sheet1":
Set source = book.Worksheets("Sheet1") 

Dim destination As Worksheet
' if it blows up here, check the filename of the book and whether it has a "Sheet2":
Set destination = book.Worksheets("Sheet2")

' when it blows up here, consider exactly what you're trying to do:
destination.Range("A1").Value = source.Range("B9:E111").Value
Run Code Online (Sandbox Code Playgroud)

最后一条指令对我来说很可疑.如果你想粘贴Sheet1!B9:E111Sheet2!A1,考虑使用Copy+ PasteSpecial作为夏嘉曦瑞士雷达表的答案.

如果您要迭代所有打开的工作簿,请考虑使用For Each循环:

Dim book As Workbook
For Each book In Workbooks
    '...
Next
Run Code Online (Sandbox Code Playgroud)