Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1776to1780
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?
21.08.2020 15:45:42
René
Hallo
Ich habe in einer Mappe probleme mit folgendem Makro:

Sub Restmenge_ermitteln()
Dim i As Long, dRest As Double, dTotal As Double
With Sheets("Tagesleistung")
i = 5 'Starte ab Zeile 5 - man könnte auch nach dem Stichwort "Aufträge" in Spalte A suchen _
lassen
'Nun laufen wir von Zeile 5 hinunter bis wir auf Total stoßen (zur Sicherheit wollen wir nie in  _
_
_
_
den Bereich Folieren gelangen!)
Do While .Cells(i, stAuftraege)  "Total" And .Cells(i, stAuftraege)  "Folieren" ' And Not _
IsEmpty (.Cells(i, stRestmenge))
If .Cells(i, stAuftraege)  0 Then 'Die Nullen in Spalte sollte man möglichst löschen, _
aber wir ignorieren sie erst einmal
'Wenn wir bereits eine Restmenge haben, ziehen wir davon ab, ansonsten starten wir mit   _
_
_
_
der Gesamtmenge
dRest = IIf(IsEmpty(.Cells(i, stRestmenge)), .Cells(i, stGesamtmenge), .Cells(i, _
stRestmenge)) _
- Application.WorksheetFunction.Sum(.Range(.Cells(i, stRestmenge + 1), .Cells(i, _
stUBound - 1)))
.Cells(i, stRestmenge) = dRest
dTotal = dTotal + dRest
.Range(.Cells(i, stRestmenge + 1), .Cells(i, stUBound - 1)).ClearContents
End If
i = i + 1
Loop
If .Cells(i, stAuftraege) = "Total" Then .Cells(i, stRestmenge) = dTotal
End With
End Sub

Anfangs hat es funktioniert, nun plötzlich funktioniert es zwar noch, aber es dauert jedesmal ca. 30 Sek. und es kommt dann eine Fehlermeldung. Vielleicht kann jemand sich ja einmal die Mappe "Tagesleistung" mit dem Button "Update" anschauen, hier die Mappe:
https://www.herber.de/bbs/user/139764.xlsm
Die Daten sind nicht sensibel, kann niemand etwas damit anfangen.
Danke und Gruss René

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler im Makro?
21.08.2020 16:51:50
Luschi
Hallo ,
Du hast diesen Teil der Do While-Schleifen-Bedingung:
' And Not IsEmpty (.Cells(i, stRestmenge))
auskommentiert und damit läuft die Schleife bis zur Zeile 1.048.576 durch und beim nächsten Durchlauf knallt's, da es eine nächste Zelle in Spalte 'A' nicht mehr gibt.
Der auskomnentierte Bedingungsteil soll ja dagegen schützen und bei der 1. Leerzelle in Spalte 'A' die Schleife beenden.
Gruß von Luschi
aus klein-Paris
AW: Fehler im Makro?
21.08.2020 18:08:14
fcs
Hallo René,
in deiner Tabelle gibt es keine Zeile mit "Total" oder "Folierung" in Spalte A. Deshalb arbeitet sich das Makro durch bis zur letzten Zeile 1048574 der Tabelle - das braucht die 30 Sekunden. Danach gibt es bei der nächsten Zeile einen Fehler, weil es keine Zelle mit der Zeilennummer gibt.
Ich habe einen "Notausgang" eingebaut, für den Fall, dass "Total" und "Folierung" fehlen
Die letzte Zeile mit Inhalte in Spalte A wird ermittelt
Die Do-Schleife verlassen, wenn der Zähler i größer als diese Zeilennummer wird.
LG
Franz
Sub Restmenge_ermitteln()
Dim i As Long, dRest As Double, dTotal As Double
Dim Zeile_L As Long
With Sheets("Tagesleistung")
'letzte Zeile mit Inhalt in Spalte stAuftraege
Zeile_L = .Cells(.Rows.Count, stAuftraege).End(xlUp).Row
i = 5 'Starte ab Zeile 5 - man könnte auch nach dem Stichwort "Aufträge" in Spalte A suchen  _
_
lassen
'Nun laufen wir von Zeile 5 hinunter bis wir auf Total stoßen (zur Sicherheit wollen wir _
nie in den Bereich Folieren gelangen!)
Do While .Cells(i, stAuftraege)  "Total" And .Cells(i, stAuftraege)  "Folieren" ' _
And Not IsEmpty(.Cells(i, stRestmenge))
If .Cells(i, stAuftraege)  0 Then 'Die Nullen in Spalte sollte man möglichst löschen,  _
_
aber wir ignorieren sie erst einmal
'Wenn wir bereits eine Restmenge haben, ziehen wir davon ab, ansonsten starten wir  _
mit _
der Gesamtmenge
dRest = IIf(IsEmpty(.Cells(i, stRestmenge)), .Cells(i, stGesamtmenge), _
.Cells(i, stRestmenge)) - Application.WorksheetFunction.Sum(.Range(.Cells(i, _
stRestmenge + 1), .Cells(i, stUBound - 1)))
.Cells(i, stRestmenge) = dRest
dTotal = dTotal + dRest
.Range(.Cells(i, stRestmenge + 1), .Cells(i, stUBound - 1)).ClearContents
End If
i = i + 1
If i > Zeile_L Then Exit Do 'Notausgang
Loop
If .Cells(i, stAuftraege) = "Total" Then .Cells(i, stRestmenge) = dTotal
End With
End Sub

Anzeige
AW: Fehler im Makro?
22.08.2020 14:35:31
René
Hallo Franz
Super, vielen Lieben Dank, Funktionert nun wieder. Auch "Luschi" Danke!
LG René

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige