vba:运行时错误'9'

当我想在打开的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 

愿有人能帮助我吗? 谢谢

如果所有的工作簿都是打开的(如果只打开1,2或3,下面的代码也可以工作),它将从"Sheet2" Range("B9:E111")复制值并粘贴到“Sheet1 “来自Cell”A1“。

 Sub sbCopyRangeToAnotherSheet() Dim i As Integer Dim wb() As Workbook ' work with dynamic number of current open workbooks ReDim wb(1 To Application.Workbooks.count) For i = 1 To Application.Workbooks.count Set wb(i) = Workbooks(i) wb(i).Worksheets("Sheet1").Range("B9:E111").Copy wb(i).Worksheets("Sheet2").Range("A1").PasteSpecial xlValues Next i End Sub 

编辑1

 Sub sbCopyRangeToAnotherSheet() Dim i As Integer Dim wb() As Workbook ' work with dynamic number of current open workbooks ReDim wb(1 To Application.Workbooks.Count) For i = 1 To Application.Workbooks.Count Set wb(i) = Workbooks(i) wb(i).Worksheets(1).Range("B9:E111").Copy wb(i).Worksheets(2).Range("A1").PasteSpecial xlValues Next i End Sub 

“下标超出范围”意味着您正在访问超出其范围的数组/集合。

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

我在单个指令中计算了几个不同的地方,可能会引发这个错误。 把它分开。

 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 

最后一条指令对我来说很可疑。 如果您想将Sheet1!B9:E111粘贴到Sheet2!A1 ,请考虑使用Copy + PasteSpecial就像在Shai Rado的答案中一样 。

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

 Dim book As Workbook For Each book In Workbooks '... Next 

试试这个,我认为把整个范围的值放到一个单元格中是个问题。 我把它首先分配给一个数组,然后把数组放在A1 +数组的上边界上…

 Sub sbCopyRangeToAnotherSheet() Dim vArr() As Variant For i = 1 To 6 vArr = Workbooks(i).Worksheets("Sheet1").Range("B9:E111").Value With Workbooks(i).Worksheets("Sheet2") .Range(.Cells(1, 1), .Cells(UBound(vArr, 1), UBound(vArr, 2))).Value = vArr End With Next i End Sub 

我会警告,使用这样的工作簿索引是有风险的,但试试这个..

 Sub sbCopyRangeToAnotherSheet() For i = 1 To 6 Workbooks(i).Worksheets("Sheet1").Range("B9:E111").Copy Workbooks(i).Worksheets("Sheet2").Range("A1") Next i End Sub 

你是否想要做这样的事情:

 Sub sbCopyRangeToAnotherSheet() For i = 1 To 6 Workbooks(i).Worksheets("Sheet2").Range("A1").Value = worksheetfunction.sum(Workbooks(i).Worksheets("Sheet1").Range("B9:E111")) Next i End Sub