2017-11-15 2 views
0

Ich wollte eine Zeile in Excel VBA hinzufügen, wenn immer der Wert in Spalte A 1 ist, hier ist der Code, den ich schrieb, aber das gibt ein " Index außerhalb des Bereichs Fehler ". Was mache ich falsch?Excel VBA Macro zum Hinzufügen einer leeren Zeile, wenn der Wert in Spalte A ist 1

Sub InsertRow() 

    Dim Col As Variant 
    Dim BlankRows As Long 
    Dim LastRow As Long 
    Dim R As Long 
    Dim StartRow As Long 
    Application.ScreenUpdating = False 
     Col = "A" 
     StartRow = 1 
     LastRow = 20 
     Worksheets("Sheet1").Activate 
      For R = StartRow To LastRow 
       If Cells(R, Col) = 1 Then 
       Cells(R, Col).EntireRow.Insert Shift:=xlDown 
       End If 
      Next R 

Application.ScreenUpdating = True 

End Sub 
+0

werden Sie die leere Zeile nach der einen mit 1 hinzufügen? – SEarle1986

+0

Das ** sollte nicht ** einen "Index außerhalb des Bereichs" Fehler geben, aber es wird auch nicht tun, was Sie wollen. (Wahrscheinlich möchten Sie 'For R = LastRow zu StartRow Step -1' und möglicherweise' Cells (R + 1, Col) .EntireRow.Insert Shift: = xlDown') – YowE3K

+1

Welche Zeile gibt den "Index außerhalb des Bereichs" -Fehler? Ich nahm an, dass es etwas mit der Schleife zu tun hat - aber ist es tatsächlich auf Ihren 'Arbeitsblättern (" Sheet1 "). Activate' Statement? Das würde bedeuten, dass Sie kein Blatt namens "Sheet1" haben. – YowE3K

Antwort

1

Code unten getestet und funktioniert.

With Worksheets("Sheet1") 

    Dim cntr as Long 
    For cntr = 20 to 5 Step - 1 
      If .Cells(cntr, 1) = 1 Then .cells(cntr,1).EntireRow.Insert Shift:=xlDown 
    Next 

End With 
+0

Getting den gleichen Fehler – goog

+0

Welche Zeile @goog ?. Haben Sie ein Arbeitsblatt namens Sheet1? Wenn nicht, ändere diesen Namen so, dass er in Excel zu deinem aktuellen Tab passt. –

0
Sub InsertRow() 

    Dim Col As Variant 
    Dim BlankRows As Long 
    Dim LastRow As Long 
    Dim R As Long 
    Dim StartRow As Long 
    Application.ScreenUpdating = False 
    Col = "A" 
    StartRow = 1 
    LastRow = 20 
    Worksheets("Sheet1").Activate 
    R = StartRow 
    Do While R <= LastRow 
     If Cells(R, Col) = 1 Then 
      Cells(R, Col).EntireRow.Insert Shift:=xlDown 
      R = R + 1 
      LastRow = LastRow + 1 
     End If 
     R = R + 1 
    Loop 

Application.ScreenUpdating = True 

End Sub 

Notieren Sie sich die Einstellung des Wertes von R in der Schleife, wie Sie die Zeilen nach unten verschieben, werden Sie immer wieder den gleichen Wert überprüft und daher eine Reihe jedes Mal hinzugefügt, so müssen wir R erhöhen um 1 überspringe die 1, die wir gerade überprüft haben.

Wir müssen auch den Endpunkt ändern, da wir Werte durch Einfügen nach Zeile 20 schieben, also erhöhen wir auch die LastRow-Variable. Wir können dies nicht in einer for-Schleife in VBA, die for-Schleife endet bei 20, so dass ich in eine while-Schleife geändert habe

Wie der Kommentar unten, ist die Arbeit rückwärts von 20 viel mehr elitär, aber seit ich nicht Denken Sie daran, dass ich es hier nicht eingefügt habe :)

+0

Sie müssten die Schleife auch ein paar mehr Iterationen erweitern. Z.B. Wenn jede zweite Zeile 1 hätte, würden Sie nur 5 neue Zeilen einfügen. – YowE3K

+0

Guter Punkt, lassen Sie mich aktualisieren – SEarle1986

+1

Hinweis: Es ist viel einfacher, nur 'For R = LastRow To StartRow Schritt -1';) – YowE3K

Verwandte Themen