Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehler im Makro

Fehler im Makro
08.03.2020 12:44:18
Marcus
Hallo an die Profis,
meine VBA Programmierung funktioniert nicht, ich habe schon verschiedene Möglichkeiten ausprobiert ohne Erfolg. :-(
Ich möchte alle Tabellenblätter durchsuchen nach dem Text Spalte A „Rülas Ergebnis“, wenn er das findet, dann sollen die Spalten J;K;L summiert werden, daneben dann die Gesamtsumme von J;K;L (Summe J + K + L = Gesamtsumme Spalte M).
Stimmt die Gesamtsumme (Spalte M) mit der Summe (Spalte B) überein, dann soll für Spalte J, Spalte K und Spalte L (nur wenn zahlen nicht NULL sind) je eine Zeile unter Rülas Ergebnis eingefügt werden.
Betrag -- Wert aus Spalte J; K und L
Datum -- soll der letzte Tag des Monats stehen (kann man Spalte absuchen nach dem letzten Datum?)
Spalte A und Spalte H -- Text (Rülas Abschlag (J), Rüla Eigenentgelt (K), Rüla Fremdentgelt (L))
Vielen lieben Dank im Voraus.
Grüße Marcus
https://www.herber.de/bbs/user/135694.xlsm

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler im Makro
08.03.2020 13:53:28
Regina
Hi Marcus,
Rückfrage zum Thema Datum:
letzer Tag des Monats? Auf welchen Monat soll sich das Datum beziehen? Kommt in den Blättern jeweils nur ein Datum vor?
Gruß Regina
AW: Fehler im Makro
08.03.2020 14:05:41
Marcus
Hi Regina,
in der Spalte C "Buchung" befindet sich immer der entsprechende Monat, es ist immer nur ein Monat,
davon soll dann der letzte Tag des Monats eingetragen werden, hier also der 31.07.2017.
Danke und Gruß
Marcus
AW: Fehler im Makro
08.03.2020 14:10:51
Regina
...ok, habe jetzt noch etwas anderes "auf dem zettel". baue ich Dir heute Nachmittag zusammen.
Gruß Regina
AW: Fehler im Makro
08.03.2020 15:01:53
Marcus
Super...danke im Voraus.
Gruß
Marcus
AW: Fehler im Makro
08.03.2020 16:06:07
Regina
Hi,
dann teste mal diesen Code:
Sub Ruelas_summe()
' suchen_Ergebnis und Zeile Färben
Dim wks As Worksheet
Dim x As Range
Dim rngCell As Range
Dim lng_zeile As Long
Dim dat_letzter_tag As Date
For Each wks In Worksheets
With wks
For Each x In .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)).Cells
If InStr(1, x, "Ergebnis") Then x.EntireRow.Columns("A:N").Interior.ColorIndex = _
_
35
If InStr(1, x, "Gesamtergebnis") Then x.EntireRow.Columns("A:N").Interior. _
ColorIndex = 19
If InStr(1, x, "Rülas Ergebnis") Then
.Cells(x.Row, 13) = Application.WorksheetFunction.Sum(.Cells(x.Row, 10), .  _
_
Cells(x.Row, 12)) * -1
If .Cells(x.Row, 13) = .Cells(x.Row, 2) Then
lng_zeile = x.Row + 1
dat_letzter_tag = DateSerial(Year(.Cells(x.Row - 1, 3)), Month(.Cells(x. _
_
Row - 1, 3)), letzter_tag(Month(.Cells(x.Row - 1, 3)), Year(.Cells(x.Row - 1, 3))))
If .Cells(x.Row, 10).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 10) * -1
.Cells(lng_zeile, 1) = "Rülas Abschlag"
.Cells(lng_zeile, 8) = "Rülas Abschlag"
.Cells(lng_zeile, 3) = dat_letzter_tag
lng_zeile = lng_zeile + 1
End If
If .Cells(x.Row, 11).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 11) * -1
.Cells(lng_zeile, 1) = "Rüla Eigenentgelt"
.Cells(lng_zeile, 8) = "Rüla Eigenentgelt"
.Cells(lng_zeile, 3) = dat_letzter_tag
lng_zeile = lng_zeile + 1
End If
If .Cells(x.Row, 12).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 12) * -1
.Cells(lng_zeile, 1) = "Rüla Fremdentgelt"
.Cells(lng_zeile, 8) = "Rüla Fremdentgelt"
.Cells(lng_zeile, 3) = dat_letzter_tag
End If
End If
End If
Next
End With
Next
End Sub
Public Function letzter_tag(lng_monat As Long, lng_jahr As Long) As Long
Select Case lng_monat
Case 1, 3, 5, 7, 8, 10, 12
letzter_tag = 31
Case 4, 6, 9, 11
letzter_tag = 30
Case 2
If schaltjahr(lng_jahr) = True Then
letzter_tag = 29
Else
letzter_tag = 28
End If
End Select
End Function
Public Function schaltjahr(lng_jahr As Long) As Boolean
If Not (lng_jahr Mod 4) = 0 Then
' nicht durh 4 teilbar
schaltjahr = False
ElseIf (lng_jahr Mod 100) = 0 And Not ((lng_jahr Mod 400) = 0) Then
' durch 100 teilbar: 1800,1900
schaltjahr = False
Else
' aber doch durch 400 teilbar: 2000
schaltjahr = True
End If
End Function

Bei der Zeile "dat_letzter_tag=" musst Du den automatischen Zeilenumbruch rausnehmen.
Gruß Regina
Anzeige
Letzter eines Monats kompliziert statt einfach?
08.03.2020 18:40:34
EtoPHG
Hallo Regina,
Sorry aber so kompliziert rechnet man den letzten eines Monats weder in VBA noch mit Formeln aus!
Das ist nämlich mit einer einzigen Anweisung getan:
LetzerDesMonats = DateSerial(iJahr, iMonat+1, 0)
$
oder mit einer Formel:
=DATUM(JahrReferenz;MonatReferenz+1;0)
Gruess Hansueli
AW: Letzter eines Monats kompliziert statt einfach?
08.03.2020 18:50:40
Regina
Hi,
das schätze ich so an der Arbeit in Foren... Man lernt nie aus! danke für den Hinweis!
Gruß
Regina
AW: Letzter eines Monats kompliziert statt einfach?
08.03.2020 20:08:01
Marcus
Hallo ihr Beiden,
ich werde es ausprobieren.
Irgendwie werden aber keine Summen in J, K und L gebildet. Die Gesamtsumme wird mit 0 angezeigt,
obwohl Werte vorhanden sind.
Scheinbar bin ich zu dämlich dafür. :-(
Vielleicht könnt Ihr helfen.
Liebe Grüße
Marcus
Anzeige
AW: Letzter eines Monats kompliziert statt einfach?
08.03.2020 20:44:06
Regina
Hallo,
ich habe es so verstanden, dass die Summe aus J - L gebildet un din M ausgegeben werden soll und das in der Zeile in der Rülas Ergebnis steht. Passt das nicht?
Gruß
Regina
AW: Letzter eines Monats kompliziert statt einfach?
09.03.2020 18:06:33
Marcus
Hallo Regina,
sorry, habe es grade erst gelesen. :-(
In den Saplten J-L soll jeweils eine Summe gebildet werden. Diese Summen sollen
dann addiert werden und in M ausgewiesen werden.
Danke im Voraus.
Gruß
Marcus
AW: Letzter eines Monats kompliziert statt einfach?
09.03.2020 18:09:56
Regina
.... jetzt habe ich wohl einen Knoten im Kopf: In den Soalten J - L steht doch bereits eine Summenfunktion (in deiner Beispieldatei), was soll denn da noch über den Code summiert werden?
Gruß Regina
Anzeige
AW: Letzter eines Monats kompliziert statt einfach?
09.03.2020 18:35:09
Marcus
Hallo,
nee...keinen Knoten im Kopf.
In der Beispieltabelle wurde die Summe manuell eingepflegt, um zu zeigen,
was rauskommen soll.
Gruß
Marcus
AW: Letzter eines Monats kompliziert statt einfach?
09.03.2020 18:50:36
Regina
...ok, dann hier mit Summenbildung der darüber liegenden Zeilen.. Ich habe auch das Findes des letzten Tages des Monats an Hansuelis Vorschlag angepasst. Das ist dann doch deutlich eleganter als meine Variante.
Sub Ruelas_summe()
' suchen_Ergebnis und Zeile Färben
Dim wks As Worksheet
Dim x As Range
Dim rngCell As Range
Dim lng_zeile As Long
Dim dat_letzter_tag As Date
Dim lng_zeile_Ruelas As Long
Dim dbl_summe_J As Double
Dim dbl_summe_K As Double
Dim dbl_summe_L As Double
For Each wks In Worksheets
With wks
For Each x In .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)).Cells
If InStr(1, x, "Ergebnis") Then x.EntireRow.Columns("A:N").Interior. _
ColorIndex = 35
If InStr(1, x, "Gesamtergebnis") Then x.EntireRow.Columns("A:N").Interior. _
ColorIndex = 19
If InStr(1, x, "Rülas Ergebnis") Then
' Summe in J - L bilden
' von aktueller Zeile -1 nach oben laufen, bis in Spalte A kein Rülas  _
mehr steht
lng_zeile_Ruelas = x.Row - 1
dbl_summe_J = 0
dbl_summe_K = 0
dbl_summe_L = 0
Do Until .Cells(lng_zeile_Ruelas, 1)  "Rülas"
' Summen bilden
dbl_summe_J = dbl_summe_J + .Cells(lng_zeile_Ruelas, 10)
dbl_summe_K = dbl_summe_K + .Cells(lng_zeile_Ruelas, 11)
dbl_summe_L = dbl_summe_L + .Cells(lng_zeile_Ruelas, 12)
lng_zeile_Ruelas = lng_zeile_Ruelas - 1
Loop
.Cells(x.Row, 10) = dbl_summe_J
.Cells(x.Row, 11) = dbl_summe_K
.Cells(x.Row, 12) = dbl_summe_L
.Cells(x.Row, 13) = Application.WorksheetFunction.Sum(.Cells(x.Row, 10),  _
.Cells(x.Row, 12)) * -1
If .Cells(x.Row, 13) = .Cells(x.Row, 2) Then
lng_zeile = x.Row + 1
dat_letzter_tag = DateSerial(Year(.Cells(x.Row - 1, 3)), Month(. _
Cells(x.Row - 1, 3)) + 1, 0)
If .Cells(x.Row, 10).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 10) * -1
.Cells(lng_zeile, 1) = "Rülas Abschlag"
.Cells(lng_zeile, 8) = "Rülas Abschlag"
.Cells(lng_zeile, 3) = dat_letzter_tag
lng_zeile = lng_zeile + 1
End If
If .Cells(x.Row, 11).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 11) * -1
.Cells(lng_zeile, 1) = "Rüla Eigenentgelt"
.Cells(lng_zeile, 8) = "Rüla Eigenentgelt"
.Cells(lng_zeile, 3) = dat_letzter_tag
lng_zeile = lng_zeile + 1
End If
If .Cells(x.Row, 12).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 12) * -1
.Cells(lng_zeile, 1) = "Rüla Fremdentgelt"
.Cells(lng_zeile, 8) = "Rüla Fremdentgelt"
.Cells(lng_zeile, 3) = dat_letzter_tag
End If
End If
End If
Next
End With
Next
End Sub
Gruß Regina
Anzeige
AW: Letzter eines Monats kompliziert statt einfach?
09.03.2020 18:53:38
Marcus
Super.....Danke Dir!!
Werde ich dann morgen ausprobieren.
Liebe Grüße
Marcus
AW: Letzter eines Monats kompliziert statt einfach?
10.03.2020 18:49:25
Marcus
Hallo,
bei der Zeile
Do Until .Cells(lng_zeile_Ruelas, 1) "Rülas"
bekomme ich eine Fehlermeldung:
Anwendungs- oder Objektdefinierter Fehler
:-(
Keine Ahnung was das jetzt ist? :-(
Gruß
Marcus
AW: Letzter eines Monats kompliziert statt einfach?
10.03.2020 19:29:06
Regina
Hm... das kann eigentlich nur passieren, wenn über der Zeile "Rülas Ergebnis" keine Zeile mehr vorhanden ist. Da Du ja aber in den Blättern Überschriften stehen hast, kann das wiederum eigentlich nicht sein.
Kannst Du feststellen auf welchem Tabellenblatt der Fehler aufläuft?
lad doch sonst Deine Datei nochmal hoch.
Gruß Regina
Anzeige
AW: Letzter eines Monats kompliziert statt einfach?
14.03.2020 16:27:01
Regina
Hi, der Code in der Datei ist nicht der, denich Dir zuletzt gepostet habe, in dem Code in Deiner Datei fehlt eine if-Abfrage.
Hier nochmal der korrekte Code:
Sub Ruelas_summe()
' suchen_Ergebnis und Zeile Färben
Dim wks As Worksheet
Dim x As Range
Dim rngCell As Range
Dim lng_zeile As Long
Dim dat_letzter_tag As Date
Dim lng_zeile_Ruelas As Long
Dim dbl_summe_J As Double
Dim dbl_summe_K As Double
Dim dbl_summe_L As Double
For Each wks In Worksheets
With wks
For Each x In .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)).Cells
If InStr(1, x, "Ergebnis") Then x.EntireRow.Columns("A:N").Interior. _
ColorIndex = 35
If InStr(1, x, "Gesamtergebnis") Then x.EntireRow.Columns("A:N").Interior. _
_
ColorIndex = 19
If InStr(1, x, "Rülas Ergebnis") Then
' Summe in J - L bilden
' von aktueller Zeile -1 nach oben laufen, bis in Spalte A kein Rülas  _
_
mehr steht
lng_zeile_Ruelas = x.Row - 1
dbl_summe_J = 0
dbl_summe_K = 0
dbl_summe_L = 0
Do Until .Cells(lng_zeile_Ruelas, 1)  "Rülas"
' Summen bilden
dbl_summe_J = dbl_summe_J + .Cells(lng_zeile_Ruelas, 10)
dbl_summe_K = dbl_summe_K + .Cells(lng_zeile_Ruelas, 11)
dbl_summe_L = dbl_summe_L + .Cells(lng_zeile_Ruelas, 12)
lng_zeile_Ruelas = lng_zeile_Ruelas - 1
Loop
.Cells(x.Row, 10) = dbl_summe_J
.Cells(x.Row, 11) = dbl_summe_K
.Cells(x.Row, 12) = dbl_summe_L
.Cells(x.Row, 13) = Application.WorksheetFunction.Sum(.Cells(x.Row,  _
10),  _
.Cells(x.Row, 12)) * -1
If .Cells(x.Row, 13) = .Cells(x.Row, 2) Then
lng_zeile = x.Row + 1
dat_letzter_tag = DateSerial(Year(.Cells(x.Row - 1, 3)), Month(.  _
_
Cells(x.Row - 1, 3)) + 1, 0)
If .Cells(x.Row, 10).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 10) * -1
.Cells(lng_zeile, 1) = "Rülas Abschlag"
.Cells(lng_zeile, 8) = "Rülas Abschlag"
.Cells(lng_zeile, 3) = dat_letzter_tag
lng_zeile = lng_zeile + 1
End If
If .Cells(x.Row, 11).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 11) * -1
.Cells(lng_zeile, 1) = "Rüla Eigenentgelt"
.Cells(lng_zeile, 8) = "Rüla Eigenentgelt"
.Cells(lng_zeile, 3) = dat_letzter_tag
lng_zeile = lng_zeile + 1
End If
If .Cells(x.Row, 12).Value  0 Then
Rows(lng_zeile).Insert
Rows(lng_zeile).ClearFormats
.Cells(lng_zeile, 2) = .Cells(x.Row, 12) * -1
.Cells(lng_zeile, 1) = "Rüla Fremdentgelt"
.Cells(lng_zeile, 8) = "Rüla Fremdentgelt"
.Cells(lng_zeile, 3) = dat_letzter_tag
End If
End If
End If
Next
End With
Next
End Sub
Gruß Regina
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige