Zeile einfügen über VBA?
Hi ich habe ein VBA geschrieben, welches immer wenn in Spalte 14 "Topic" steht, dort eine Leerzeile einfügen soll und alles um eine Zeile weiter nach unten schieben soll.
Dies funktioniert aber nur, wenn ich genau diese Zeile eingeben. Kann mir jemand daraus eine Schleife bauen.. ich bekomme es nicht hin.
If ActiveSheet.Cells(4, 14).Value = Tabelle11.Cells(2, 2) Then
'Die 4 hier ist von mir eingegeben, müsste wahrscheinlich durch eine Variable getauscht werden
'Tabelle11.Cells(2,2) ist der Begriff "Topic"
ActiveSheet.Rows(4).Insert
End If
Vorher-Nachher Bilder:
Vorher:
Nachher:
2 Antworten
Wenn man mehrere Zeilen einfügen will fängt man am bestem an der "untersten" Stelle an und geht "rückwärts".
Denn.
Fügt man zwischen Zeile 1->2 eine weitere ein wird aus der vorigen Zeile 2 die Zeile 3.
Diese Zählveränderung muss entweder in der Schleife berücksichtigt werden.
Oder man fängt hinten an bis alle gewünschten Zeilen eingefügt sind.
Die Schleife oder eine andere Lösung anders rum laufen lassen.
Ich nehme für diese Zwecke eher ein While Schleife
====
Sub ZeilenEinfuegen()
Dim ze As Long, zeL As Long
Dim max
zeL = 100 'Letzte Zeile bis die gesucht werden soll
max = zeL
For ze = max To 1 Step -1
Next ze
End Sub
Ich weis nicht woran es liegt aber es hat bei der ersten Topic 100 zeilen hinzugefügt danach immer etwas weniger aber trotzdem noch sehr viele
Die Schleife zeigt 'nur' von unten nach oben. Wann du aufhören musst gilt es zu ergänzen.
For
If blabla then
Exit For
End if
next
Sub ZeilenEinfuegen()
Dim ze As Long, zeL As Long
zeL = 100 'Letzte Zeile bis die gesucht werden soll
For ze = 1 To zeL
If ActiveSheet.Cells(ze, 14).Value = Tabelle11.Cells(2, 2) Then
ActiveSheet.Rows(ze).Insert
ze = ze + 1
zeL = zeL + 1
End If
Next ze
End Sub
So z.B.
Ich habe bei zel = 10 eingegeben.
das Problem ist, welches ich vorher auch hatte dass die Excel jetzt von Zeile 1-10 Leerzeilen einfügt
Ne es steht in Zeile 4, 12 und 20 momentan das Wort
Sub ZeilenEinfuegen()
Dim ze As Long, zeL As Long
zeL = 10 'Letzte Zeile bis die gesucht werden soll
For ze = 1 To zeL
If ActiveSheet.Cells(ze, 14).Value = Tabelle11.Cells(2, 2).Value Then
MsgBox "Füge Zeile ein in Zeile " & ze & " Wert1: " & ActiveSheet.Cells(ze, 14).Value & " Referenz:" & Tabelle11.Cells(2, 2).Value
ActiveSheet.Rows(ze).Insert
ze = ze + 1
zeL = zeL + 1
End If
Next ze
End Sub
probier das mal und guck mal, was die Messagebox anzeigt
Füge Zeile ein in Zeile 4 Wert1: TOPIC Referenz: TOPIC
Ich möchte, dass er vor den Zeilen in denen "Topic" steht eine Leerzeile rein macht.
Also sozusagen Zeile 4 --> Alles andere rutscht runter. Zeile 12 bzw jetzt 13 --> Alles andere rutscht runter. undsoweiter
Aber er macht jetzt in zeile 4,5,6,7,8,9,10 eine Leerzeile und bei den anderen Topics einfach nichts. Verstehst du wie ichs meine?
Kann auch noch ein Bild in ner extra Frage hochladen.
OK, evtl konnte es am Insert Befehl liegen, probier es mal so
Sub ZeilenEinfuegen()
Dim ze As Long, zeL As Long
zeL = 10 'Letzte Zeile bis die gesucht werden soll
For ze = 1 To zeL
If ActiveSheet.Cells(ze, 14).Value = Tabelle11.Cells(2, 2).Value Then
MsgBox "Füge Zeile ein in Zeile " & ze & " Wert1: " & ActiveSheet.Cells(ze, 14).Value & " Referenz:" & Tabelle11.Cells(2, 2).Value
ActiveSheet.Rows(ze).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ze = ze + 1
zeL = zeL + 1
End If
Next ze
End Sub
Nach etwas rumprobieren hab ich erkannt, dass es daran liegt, weil wenn in Zeile 4 eine Leerzeile eingefügt ist dann springt die Schleife auf 5. Dort steht dann wieder Topic somit wird in 5 eine Leerzeile eingefügt und alles runtergeschoben. Somit liegt auf Zeile 6 wieder Topic undso weiter.
Habe versucht es zu Lösen indem ich ze in 2er Schritten abspielen lasse aber dann funktioniert es natürlich nur bei den geraden Zahlen..
hm ja rein logisch eigentlich schon. tuts nur leider nicht..
Wie setze ich dieses "rückwärts laufen um"?