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

Das klappt super,vielen Dank :)!

1
@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

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

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

1
@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
@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
@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
@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

EXCEL,VBA,Dropdown Inhalt ind Combobox?

Hey Leute,

Ich würde gerne einen Dropdown Inhalt der auf der Zelle A5 ist in eine Userform Combobox einfügen. Wenn ich es Probiere steht nur der name des 1 Gliedes des Dropdowns da..

Private Sub UserForm_Initialize()

With Worksheets("Tabelle1").Activate

Rechner.ComboBox1.RowSource = "A5"

End With

End Sub

Für Antworten bin ich euch dankbar

...zur Frage

VBA in Excel, kann irgendwie zwei Ranges nicht löschen?

Hallo, ich komme mit einem VBA Makro nicht klar. Einfügen funktioniert ohne Probleme, allerdings fragt mich bei Umstellung der Formel Excel nach einem Objekt.

Sub Zeileloeschen()

With ActiveCell

  Range(.Offset(0, 0), .Offset(0, 3)).Select Shift:=xlUp

  Range(.Offset(0, 49), .Offset(0, 61)).Select Shift:=xlUp

End With

End Sub

...zur Frage

Per VBA Zeilenumbruch entfernen?

Hallo. Ich schreibe grade ein Makro und hänge ein steller fest. Ich muss in einer Zeile in jeder Zelle den manuellen Zeilenumbruch entfernen. Bisher bin ich soweit gekommen

lzeile = Cells(Rows.Count, 1).End(xlUp).Rows.Row For t = 1 To lzeile

Cells(t, 2).Replace Chr(10)

Next t

So läuft es zwar durch aber die Zeilenumbrüche werden auch nicht entfernt. Hat jemand einen Tip was ich an meinem Code ändern muss?

...zur Frage

VBA Excel Leerzeile in Spalte einfügen,wenn Werte ungleich - bis zur ersten LZ

Guten Tag, programmiere zum ersten mal ein Makro, und komme nicht mehr weiter. Ich möchte in Spalte C die Werte vergleichen, und sobald der Wert ungleich ist,soll eine Leerzeile eingefügt werden. Mit diesem Code klappt das super:

Sub Makro12() 'fügt Leerzeilen zwischen verschiedenen Lagerorten ein (Spalte C)

Dim r As Long, mcol As String, i As Long

r = Cells(Rows.Count, "C").End(xlUp).Row

mcol = Cells(r, 3).Value

For i = r To 2 Step -1 If Cells(i, 3).Value <> mcol Then mcol = Cells(i, 3).Value Rows(i + 1).Insert End If Next i End Sub

Das Problem: Ich möchte nicht dass er alle Werte vergleicht,sondern nur die Werte bis zur ersten leeren Zelle. Einfach aufzeichnen geht nicht,da die Tabellenlänge variiert. Wäre für Antworten sehr dankbar Viele Grüße

...zur Frage

Excel 2010 VBA - MsgBox, wenn schon beschriebene Zellen bearbeitet werden sollen

Hallo Zusammen,

folgendes Makro führt zu einer kleinen „Sicherheitsabfrage“:

Option Explicit

Public OldValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("A:W")) Is Nothing Then

MsgBox "Sind Sie sich sicher, dass Sie die Zelle bearbeiten wollen?", vbQuestion, "Achtung"

End If

End Sub

Das Makro funktioniert schon ganz gut, allerdings möchte ich es ein wenig anpassen. Es soll nur eine Textbox erscheinen, wenn eine bereits beschriebene Zelle bearbeitet wird. Bei Bearbeitung leerer Felder soll also keine Textbox erscheinen.

Vielen Dank schon einmal! :)

...zur Frage

Wie kann man mit einen Makro Ordner öffnen und dann die CSV-Dateil auswählen die im Zelle A1 geöffnet wird?

Hallo,

Ich brauche ein Makro mit dem ich einen Ordner öffnen, dort eine beliebige CSV-Datei auswählen kann und diese sich dann in der Zelle A1 öffnet.

bisher habe ich das im Netz gefunden:

Sub Weekly_Flash()

ChDir "C:\Users\Manuel\Downloads"

Call Application.Dialogs(xlDialogOpen).Show

End Sub

Dieses Makro öffnet meinen Ordner, alerdings öffnet es die CSV datei in einer neuen Excel-Datei und nicht in der Zelle A1.

Ich kenne mich leider gar nicht mit VBA aus. :/ Habe nur im Internet immer wieder Makros eingefügt und geguckt was passiert und meinen Pfad angegeben :D

...zur Frage

Was möchtest Du wissen?