Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Code erweitern

Forumthread: Code erweitern

Code erweitern
16.02.2025 23:23:23
JR2025
Hallo,

ein großer Dank an alle die schon auf meinen Beitrag geantwortet haben.
Leider funktioniert es aber noch nicht wie ich mir das vorstelle.

Das Problem mit den leeren Zellen habe ich durch das Kopieren aus einer Versteckten Spalte gelöst.
Damit funktioniert der Code schon fast perfekt.

Allerdings macht es sich erforderlich nicht am Monatsende die extra Zeile mit Summe einzufügen sondern Täglich.
Da hat aber mein Code den Nachteil, es wird bei allen schon eingefügten Zeilen noch eine Zeile eingefügt und das jeden Tag.

Für das Monatsende hatte ich schon eine Prüfung eingefügt ob der Code schon ausgeführt wurde.
Besteht die Möglichkeit Zeilen die schon eingefügt sind zu überspringen???

Sub Leerzeile()

Dim ErsteZeile As Long, LetzteZeile As Long, Spalte As Long, i As Long
Dim rng As Range
ErsteZeile = 7 ' Berechnung in der Tabelle beginnt in Zeile
LetzteZeile = 1945 ' letzte Zeile die berechnet wird
Spalte = 1 ' das ist die Spalte in der geprüft wird ob sich das Datum ändert

ActiveSheet.Unprotect

'If Range("X1") = 0 Then ' in der Zelle wird geprüft ob das Makro schon ausgeführt wurde

Range("W4:W1945").Copy 'in dieser verdeckten Spalte werden alle Zellen mit einer Zahl belegt, leere Zellen mit 0
Range("O4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

For i = LetzteZeile To ErsteZeile Step -1
If Cells(i, Spalte) > Cells(i - 1, Spalte) Then
Rows(i).Insert (xlShiftDown)
Cells(i, 24) = 1
End If
Next i
For Each rng In Columns(15).SpecialCells(xlCellTypeConstants).Areas
rng(rng.Rows.Count + 1).Formula = "=sum(" & rng.Address & ")"

Next

' Else
' MsgBox ("Monatsabschluß wurde schon durchgeführt")
'End If

Range("C6").Select

End Sub


ich habe die Tabelle als Beispiel hochgeladen
https://www.herber.de/bbs/user/175716.xlsm

Danke für eure Mühe
bis später
Jörg
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code erweitern
16.02.2025 23:48:52
ralf_b
was hindert dich denn daran X1 zur Prüfung heranzuziehen? X1 wird zwar nicht am Ende des Makros irgendwie beschrieben, aber das wolltest du sicher noch einbauen.

Man kann natürlich auch zählen wie viele leere Zeilen existieren wo ohne Codeausführung keine sein sollten, um festzustellen ob der Code schon einmal Leerzeilen eingefügt hat. Das ist etwas einfacher wenn man wüßte ob die LetzteZeile 1945 willkürlich gewählt wurde oder aus einem anderen Grund so festgelegt wurde.
Anzeige
AW: Code erweitern
17.02.2025 00:09:10
JR2025
Hallo ralf,
Danke für die schnelle Antwort.
Die Prüfung von X1 habe ich deaktiviert da es die Ausführung des Makros verhindert sobald eine Zeile eingefügt wurde. Vielleicht kann man aber die eingefügte 1 die in X1 gezählt werden zum prüfen verwenden.
Die letzte Zeile 1945 hat keine besondere Bedeutung, kann auch 2000, 3000 oder .... sein. Die leer Zellen sind nicht immer gleich verteilt da weiss ich nicht wie ich das verwenden soll.
Danke bis später
Jörg
Anzeige
AW: Code erweitern
17.02.2025 08:09:57
ralf_b
ich muß dich korrigieren. Die letzteZeile hat immer eine Bedeutung. Meist sogar eine Große. Die letzteZeile begrenzt deinen Arbeitsraum. Was oft entscheidend für die Geschwindigkeit des Codes ist. Man stellt damit fest wo deine Daten enden und erhält eine definierte Range. Hier kannst du dann auf verschiedenste Weise prüfen was sich in der Range geändert hat nach Codeausführung oder auch davor.
Siehe Onurs Beispiel. Man könnte einfach zählen ob das Wort "Zwischensumme" in Spalte A mehrfach vorkommt oder überhaupt vorkommt. Oder ob sich in der Summenspalte eine der eingefügten Formeln befindet. Es gibt meist mehre Möglichkeiten solcher Lösungen.
hier mal eine Idee wie man Onurs Vorschlag dann prüfen könnte.
If Not Range("A7:A" & LetzteZeile).Find("Zwischensumme", LookIn:=xlValues, Lookat:=xlWhole) Is Nothing Then Exit Sub

Anzeige
AW: Code erweitern
17.02.2025 18:05:44
JR2025
Hallo,
Danke Onurs Danke ralf.

ist natürlich richtig das die LetzteZelle wichtig ist, ich wollte nur das alle Einträge rein passen die im Monat anfallen und bin dadurch auf die Zahl gekommen.
Eure Lösungen sind eleganter aber wo füge ich die Zeile ein.
If Not Range("A7:A" & LetzteZeile).Find("Zwischensumme", LookIn:=xlValues, Lookat:=xlWhole) Is Nothing Then Exit Sub

entweder der Code wird gleich beendet oder es werden trotzdem da wo schon Zwischensumme steht noch eine Zeile mit Zwischensumme eingefügt.

bis später
Jörg
Anzeige
AW: Code erweitern
17.02.2025 18:17:37
Onur
Du sollst da nix einfügen - mein Code läuft schon einwandfrei.

Forumthreads zu verwandten Themen

Anzeige
Anzeige