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

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

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

Excel Zahlenbereich Abfrage?

Wie kann man aus einem Feld, in der eine beliebige Zahl eingegeben werden kann, eine Abfrage starten, bei der für Zahlen in verschiedenen definierten Zahlenbereichen unterschiedliche Ergebnisse ausgegeben werden?

...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

Welche Programmiersprache sollte ich erlernen?

Sehr geehrte Gemeinde,

Also es ist so. Ich interessiere mich für das Erlernen wie man Programme bzw. Anwendungen, Scripts und sonstiges schreibt. Ich plane eine konkrete Ausbildung in einer dieser Sprachen zu machen.

Ich bin sehr interessiert daran und weiß auch das es schwer wird, das ist keine Frage.

Ich hab allerdings jetzt keine richtige Ahnung in welcher Sprache ich mein Wissen aufbauen bzw. einen Lehrgang starten soll.

Ich habe mich schon ein wenig informiert und kenne vom Namen folgende gebräuchlichen Programmiersprachen, mit einer von denen ich mich dann auch weiterbilden möchte:

C, C++, C#, Java, Visual Basic oder Visual Basic for Applications (VBA).

Des Weiteren bin an Python interessiert, weil eines meiner persönlichen Lieblingsprogramme in Python geschrieben ist. Mit Python möchte ich aber keinen Lehrgang belegen.

Es wird sich ausschließlich um eine der oberen Programmiersprachen handeln.

Kann jemand von euch, der sich vielleicht schon mit der ein oder anderen oder sogar mehreren von denen auskennt, mir Tipps geben, welche Programmiersprache, die besten Möglichkeiten (auch in der Zukunft) gibt bzw. was für Einschränkungen bei diesen bestehen?

Ich möchte einmal hochleistungsfähige Programme schreiben.

Auf der Einfachheit liegt überhaupt kein Betrachtungspunkt.

Es kann also schwer sein, wenn es dafür entsprechend flexible Möglichkeiten bietet.

Bei Java habe ich schon gehört, dass man hiermit plattformübergreifende Applikationen schreiben kann.

Vielen Dank für Eure/deine Hilfe.

...zur Frage

Was habe ich bei diesem VBA Code falsch gemacht?

Hallo miteinander,

Ich habe ein Problem!

Ich habe einen Code geschrieben der mir richtig erscheint, aber ich erhalte immer den gleichen Fehler:

Laufzeitfehler'13'

Typen unverträglich

Die Microsoft Hilfe nützt leider auch nichts!

Könntet ihr mir weiterhelfen?

Der Code steht unten:


Public text13 As Date
Public Text2 As Long
Private Sub CommandButton1_Click()
If text13 = Format("DD/MM/YYYY") Then
If Not text13 = Format("DD/MM/YYYY") Then
MsgBox ("Ups, Sie haben kein korrektes Datum eingegeben!")
End If
With Me.TextBox1
Cells(65000, 1).End(xlUp).Offset(1, 0).Activate
ActiveCell = text13
End With
With Me.TextBox2
Cells(65000, 2).End(xlUp).Offset(1, 0).Activate
ActiveCell = Text2
End With
Else
MsgBox ("Irgendetwas stimmt nicht!")
End If
TextBox1 = ""
TextBox2 = ""
End Sub
Private Sub TextBox1_Change()
Dim Text1 As Variant
Text1 = TextBox1
text13 = CDate(Text1)
End Sub
Private Sub TextBox2_Change()
Text2 = TextBox2.Value
End Sub

Ich wäre froh über eine schnelle Antwort!

Danke schon im Voraus!

Mit Freundlichen Grüssen

StillGamingLP

...zur Frage

Was möchtest Du wissen?