2016-11-03 1 views
0

Ich versuche, 8 verschiedene Bereiche aus 8 verschiedenen Tabellen in einem Arbeitsblatt zu kopieren. Also habe ich diese Codierung unten entwickelt. Ich benutzen Vereinigung Methode, um diese Bereiche zu kombinieren, aber es ergab einvba - Laufzeitfehler '9': Index außerhalb des Bereichs

Laufzeitfehler ‚9‘: Index außerhalb des zulässigen Bereichs

auf der folgenden Zeile Set range1 = Sheets("Sheet1").Range("O24").

Kann mir jemand sagen, wo ich falsch gemacht habe? Ich kann nicht erkennen, wo mein Fehler ist.

Sub ONSHORE() 

'Last cell in column 
Dim WS As Worksheet 
Dim LastCell As Range 
Dim LastCellRowNumber As Long 
Dim range1 As Range, range2 As Range, range3 As Range, range4 As Range, range5 As Range, range6 As Range, range7 As Range, range8 As Range, multipleRange As Range 

Set range1 = Sheets("Sheet1").Range("O24") 
Set range2 = Sheets("Sheet1").Range("AA40, AC40") 
Set range3 = Sheets("Sheet1").Range("AA56, AC56") 
Set range4 = Sheets("Sheet1").Range("AA72, AC72") 
Set range5 = Sheets("Sheet1").Range("AA88, AC88") 
Set range6 = Sheets("Sheet1").Range("AA104, AC104") 
Set range7 = Sheets("Sheet1").Range("AA120, AC120") 
Set range8 = Sheets("Sheet1").Range("AA130, AC130") 
Set multipleRange = Union(range1, range2, range3, range4, range5, range6, range7, range8) 

Set WS = Worksheets("Sheet1") 

Dim wb As Workbook, wb2 As Workbook 
Dim vFile As Variant 
Dim i As Integer 

'Set source workbook 
Set wb = ActiveWorkbook 

'Open the target workbook 
vFile = Application.GetOpenFilename("Excel-files,*.xlsx", MultiSelect:=True) 

If IsArray(vFile) Then 
    For i = LBound(vFile) To UBound(vFile) 
     Set wb2 = Workbooks.Open(vFile(i)) 

     'if the user didn't select a file, exit sub 
     If TypeName(vFile) = "Boolean" Then Exit Sub 

     With WS 
      Set LastCell = .Cells(.Rows.Count, "D").End(xlUp) 
      LastCellRowNumber = LastCell.Row + 1 
     End With 

     'Set selectedworkbook 
     Set wb2 = ActiveWorkbook 

     'Select cells to copy 
     wb2.Worksheets("Sheet1").Range(multipleRange).Copy 

     'Go back to original workbook you want to paste into 
     wb.Activate 

     'Paste starting at the last empty row 
     wb.Worksheets("Sheet1").Range("D" & LastCellRowNumber).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 

     'Close and save the workbook you copied from 
     wb2.Save 
     wb2.Close 
    Next i 

    Application.ScreenUpdating = True 
    Application.CutCopyMode = False 
End If 

End Sub 
+0

Sind Sie sicher, dass Sie ein Blatt mit dem Namen "Sheet1" haben? Wenn Sie die Zeile 'Set WS = Worksheets (" Sheet1 ")' nehmen und über diese Zeilen setzen, gibt es einen Fehler zurück? –

+0

Ich habe meine Codierung geändert, wie Sie gesagt haben. Es wurde immer noch ein Fehler zurückgegeben. – Deve1

+0

was bedeutet, dass Sie kein Blatt namens "Sheet1" haben, oder? –

Antwort

2

Ich vermute, dass Sheets("Sheet1") nicht existiert. Es könnte einen Platz drin haben Sheets("Sheet 1").

Es gibt keinen Grund, die Bereiche zu vereinigen. Der folgende Code ist analog zu Ihrer Vereinigung.

Set multipleRange = Sheets ("Sheet1"). Range ("O24, AA40, AA56, AA72, AA88, AA104, AC120, AA130")

+0

Ich habe versucht, Ihren Code, aber es immer noch den gleichen Fehler zu Ihrem Code. – Deve1

+0

Sie erhalten den Fehler, weil es kein Arbeitsblatt namens 'Sheet1' gibt. –

0

ich den Fehler bekam 9, wenn sheet1 war wenn Fehler 1004 fehlt, wenn Blatt1 vorhanden ist und keine Daten im Bereich sind. Also die Antwort für Ihr Problem ist Blatt 1 fehlt.

Verwandte Themen