VBA Makro Excel Letzte beschriebene Zeile vor Leerzeile, weitere Leerzeile einfügen

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Cursor in oberste beschriebene Zelle setzen.
Code:
Sub ersteLeereFindenZeileEinfügen()
Activecell.end(xldown).offset(1, 0).entirerow.insert
'evtl auch Activesheet.range("B2"). anstatt activecell., dann ist es egal, wo der Zellzeiger steht,
'aber es muss mindestens EINE ZELLE UNTERHALB der aktiven Zelle/B2 einen Eintrag haben, sonstläuft der ZZgr bis unten durch!
end sub


Nopset 
Fragesteller
 27.10.2014, 15:44

Das klappt super,vielen Dank :)!

1
Iamiam  27.10.2014, 20:46
@Nopset

gern geschehen.
"...sollte mir eig die letzte beschriebene Anzeigen..."
Die Adressfindung würde schon funktionieren, aber Du hast keine Anzeige vorgesehen.
Füge vor end sub ein:
Msgbox Ende oder Msgbox(Ende)
dann sollte die Ende-Zahl in der Msgbox stehen
oder stattdessen ein STOP,
dann stoppt der Ablauf und wenn Du bei der Fehlermeldung dann Debuggen drückst, kannst du im Code die altuellen Werte aller Ausdrücke und Variablen sehen (ein bisschen rumprobieren nötig, die Anzeige zum Vorschein zu bringen, ist oft Gefühlssache, manchmal muss man was markieren, manchmal nicht)

Musst nur nachher wieder jedesmal das blaue Viereck drücken, damit der Haltemodus wieder aufgehoben wird.

0
Iamiam  29.10.2014, 09:34
@Iamiam

danke für den * und weiterhin gute Fortschritte!!

0

Mein Vorschlag:

Dim MyRow As Long
MyRow = ActiveSheet.Range("B:B").End(xlDown).Row + 1
ActiveSheet.Cells(MyRow, 2).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Nopset 
Fragesteller
 27.10.2014, 15:40

klappt leider nicht richtig, ich möchte eine komplette Zelle einfügen. Andere Vorschläge?:)

1
offeltoffel  27.10.2014, 15:58
@Nopset

Was bitte ist denn eine unkomplette Zelle? ;D

Ich verstand es so: finde in Spalte B die erste leere Zelle. Füge vor dieser Zelle eine weitere ein.

Falls es hier nur um den Einfügen-Befehl geht: nimm doch mal deine Tätigkeit als Makro auf. Mit der oben beschriebenen Funktion kannst du auf jeden Fall die erste leere Zeile finden. Wenn du das "+1" wegnimmst, landest du in der letzten Zelle in B, die noch Inhalt hat.

P.S.: jetzt verstehe ich...du brauchst eine leere ZEILE statt einer leeren ZELLE. Na, das ist das geringste Problem ;)

1
Iamiam  27.10.2014, 21:07
@offeltoffel

@ offel:
Hast Du das mal ausprobiert? Ich zwar auch nicht, aber ich vermute, dass VBA mit Range("B:B").End(xldown) nichts anfangen kann: B:B reicht ja schon bis zur letzten Zelle und ist ein mehr-(sogar viel-)zelliger Bereich,
als Startpunkt für end(xldown) dürfte aber nur eine Einzelzelle in Betracht kommen.

Dim MyRow As Long : warum as long? as integer reicht völlig!

Vorschlag zur Kürzung:

ActiveSheet.Cells(ActiveSheet.Range("B2").End(xlDown).Row + 1, 2).Select

wobei man anstatt mit select auch direkt weitermachen kann:
.entirerow.insert

wobei ich vermute, dass man sich zumindest das zweite ActiveSheet. auch noch sparen kann.
Da ich selbst gerne die erste Zeile für Überschriften oder noch kommende Einträge freihalte, starte ich üblicherweise erst in B2 oder sogar B3.

Hab beides nicht ausprobiert, kannst Du selbst machen, wenn Du Dich vervollkommnen willst.

0
offeltoffel  28.10.2014, 06:28
@Iamiam

Das Skript habe ich ausprobiert und es hat bei mir funktioniert. Ich programmiere grunsätzlich wenig mit Excel und hab mir das aus einem aufgezeichneten Makro abgeleitet. Auf jeden Fall sehe ich ein, dass meine Version quasi "over the top" ist.

MyRange deshalb als Long, weil in Excel 2010 nach meinem Kenntnisstand mehr als 65535 Zeilen in einem Arbeitsblatt sein können - und damit auch mehr als so viele Einträge. Mir fällt aber gerade ein, dass ich eigentlich hätte "Double" nehmen wollen...

Dass ich zuerst selektiere und dann den nächsten Befehl mache, habe ich einfach aus dem aufgezeichneten Makro übernommen. Ich fand das nett, weil es quasi weniger Schritte auf einmal durchführt und so leichter nachzuvollziehen ist.

Danke auf jeden Fall für deine Tipps, ich bin immer froh, wenn mir jemand erklärt, wie ich mein Skript vereinfachen und kürzen kann! :)

1
Iamiam  28.10.2014, 20:12
@offeltoffel

man lernt nie aus!
Danke für die Rückmeldung!
Es ist jetzt an mir, das
MyRow = ActiveSheet.Range("B:B").End(xlDown).Row + 1
auszuprobieren.
Und dass mit xlsx "i As Integer" nicht mehr reichen könnte, ist mir bisher auch noch nicht aufgegangen! (abgesehen davon, dass ich die Variablen meist gar nicht erst als Typ klassifiziere, VBA nimmt einem das ja ab, und das bisschen zusätzlicher Speicher für die zunächst automatisch gesetzte Variant-Variable, die VBA erst mal reserviert, spielt heutzutage keine Rolle mehr. Sauberer ist das natürlich!)
Option Explicit nehme ich aber , Schreibfehler sind ja so leicht zu übersehen.

0