簡體   English   中英

VBA:運行時錯誤“ 9”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM