[英]vba: run time error '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
有人可以幫我嗎? 謝謝
“下標超出范圍”表示您正在訪問數組/集合的邊界之外的內容。
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
,請考慮使用Shai Rado的答案中的 Copy
+ PasteSpecial
。
如果要迭代所有打開的工作簿,請考慮使用For Each
循環:
Dim book As Workbook
For Each book In Workbooks
'...
Next
如果您所有的工作簿都是打開的(如果僅打開1、2或3,下面的代碼也可以工作),它將從"Sheet2"
Range("B9:E111")
復制值並將其粘貼到“ Sheet1”中來自單元格“ 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
試試這個,我認為將整個范圍的值放在一個單元格中是一個問題。 我首先將其分配給一個數組,然后從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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.