2017-01-03 3 views
3

Dies ist ein einfacher Makrocode, um den Bereich A2 bis zur letzten Zeile aus einer Arbeitsmappe zu kopieren und in eine andere Arbeitsmappe einzufügen. Ich bin ein Neuling und googelte viele Seiten, konnte aber nicht selbst helfen. Der Code wird eingefügt unten-Excel Macro-Laufzeitfehler '9': Index außerhalb des Bereichs (innerhalb von For Loop)

`

Sub TC_Creation_Sample() 
Dim aPath As String, aFile As String, bFile As String 
Dim FinalRow As Integer, x As Integer 

With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
End With 

aPath = "C:\temp\" 
aFile = aPath & "Config" 
bFile = aPath & "TC_Template" 
Workbooks.Open (aFile) 
Sheets("Config").Activate 
'FinalRow = Cells(Rows.Count, "A").End(xlUp).Row 
FinalRow = Worksheets("Config").Range("A2").End(xlDown) 

For x = 2 To FinalRow 
      Worksheets("Config").Range("A" & x).Select 
      Selection.Copy 
      Workbooks.Open (bFile) 
      Worksheets("TestCases").Range("A" & x).Select 
      ActiveSheet.Paste 
Next x  
End Sub 

`

Daraus resultierende Beim Debuggen, wird es festgestellt, dass der Code erfolgreich kopieren Einfügen A2-Wert. Es wirft jedoch Laufzeitfehler 9: Index außerhalb des Bereichs. Und der Fehler tritt auf, wenn Arbeitsblätter ("Config"). Bereich ("A" & x). Auswahl wird zum zweiten Mal nach Next x ausgeführt. Ich bin mir nicht sicher, was diesen Fehler wirklich verursacht. Freundlicher Hinweis.

+0

Es sieht so aus, als würden Sie Aufgaben mehrmals ausführen, die nur einmal ausgeführt werden sollten ... wie das Öffnen einer Arbeitsmappe. Und auch - versuchen Sie, den vollen Bereich zu nehmen und fügen Sie es statt Schleife durch eins – CallumDA

+0

** For-Schleife ** wird implementiert, da es eine Notwendigkeit ist, die Daten zu betrachten, die eine Satzzelle nach der anderen vertikal in eine Spalte eingefügt werden. – Anshu

Antwort

1

Ist das besser? Ich habe Ihre workbooks zu workbook variables zugewiesen und select und copy Methoden herausgenommen. Ich habe auch .Row wie andere auch

vorgeschlagen haben
Sub TC_Creation_Sample() 
    Dim aPath As String, aFile As String, bFile As String 
    Dim FinalRow As Long, x As Long 
    Dim wbA As Workbook, wbB As Workbook 

    With Application 
     .ScreenUpdating = False 
     .DisplayAlerts = False 
    End With 

    aPath = "C:\temp\" 
    aFile = aPath & "Config" 
    bFile = aPath & "TC_Template" 

    Set wbA = Workbook.Open(aFile) 
    Set wbB = Workbooks.Open(bFile) 

    FinalRow = wbA.Worksheets("Config").Range("A2").End(xlDown).Row 
    'FinalRow = wbA.Worksheets("Config").Cells(Rows.Count, "A").End(xlUp).Row 

    For x = 2 To FinalRow 
     wbB.Worksheets("TestCases").Range("A" & x).Value = wbA.Worksheets("Config").Range("A" & x) 
    Next x 
End Sub 
+0

@ CallumDA- Vielen Dank für den Vorschlag, der nicht nur das Problem gelöst, sondern ist leicht zu verstehen! Darüber hinaus werden FinalRow und X in Long geändert. – Anshu

+0

Gerne helfen, wenn dies Ihr Problem gelöst hat, akzeptieren Sie die Antwort, indem Sie auf das Häkchen auf der linken Seite dieser Antwort klicken – CallumDA

1

Sie haben FinalRow Variable keine Zeilennummer zugewiesen. Versuchen Sie:

FinalRow = Worksheets("Config").Range("A2").End(xlDown).Row 
+0

Versucht mit hinzufügen .Row, aber der gleiche Fehler ist an der gleichen Stelle im zweiten Lauf der for-Schleife – Anshu

1

eine Reihe von Punkten zu nennen.

Erste - Eine Excel-Arbeitsmappe viele Millionen von Zeilen enthalten können - aber der Code wird auf nur 32.768 Zeilen beschränkt, da Sie beide definieren FinalRow und X als Ganze Zahlen. Verwenden Sie stattdessen Lange Ganzzahlen (Dim X als Long, FinalRow als Long), falls eine der geöffneten Arbeitsmappen mehr als 32.000 Zeilen enthält.

Jetzt auf die Ursache des Fehlers. Wenn Sie den Code zum zweiten Mal über die For-Next-Schleife ausführen, hängt das System, da die aktive Arbeitsmappe bFile ist und die Registerkarte Config in der Datei bFile nicht vorhanden ist (sie befindet sich in aFile) stürzt mit der nicht hilfreichen Fehlermeldung ab, die Sie erhalten (weil es die richtige Registerkarte nicht finden kann, weil es an der falschen Stelle sucht).

Übrigens wird Ihr Code versuchen, jedes Mal, wenn For..Next loop ausgelöst wird, (bFile) zu öffnen. Müssen Sie die Datei jedes Mal öffnen? Sicherlich ist es nur ein Fall, die Details von einem Blatt zum nächsten zu kopieren.

Sie sollten auch einige Fehlerbehandlung haben. Wenn entweder aFile keine Registerkarte Config enthält oder bFile die Registerkarte TestCases nicht enthält, stürzt der Code ab. Ich würde dringend empfehlen, dass Sie einige Fehler behandeln, um diese Instanzen zu behandeln.

+0

@ AdzzzUK- Vielen Dank für das Aufzeigen der Fehler im Code. – Anshu

Verwandte Themen