AW: Auführlicheres Makro
25.03.2020 12:54:45
Sulprobil
Hallo René,
Für neue oder veränderte Spalten musst Du nun lediglich die Enumerierung ändern - also ggf- einfach zwischen J und K eine neue Spalte einfügen und zwischen stMaschine8 und stUBound eine stMaschine9 einfügen.
Option Explicit
Enum Spalten_in_Tabelle2
stLBound = 0 'Damit wir ggf. von stLBound + 1 iterieren können
stAuftraege = 1 '= 1 kann man weglassen, der nächste Eintrag bekommt immer 1 dazu
stGesamtmenge
stRestmenge 'Die Maschinen sind alle von stRestmenge + 1 bis stUbound - 1
stMaschine2
stMaschine3
stMaschine4
stMaschine5
stMaschine6
stMaschine7
stMaschine8
stUBound 'Damit wir bis stUBound - 1 iterieren können
End Enum
Sub Restmenge_ermitteln()
Dim i As Long, dRest As Double, dTotal As Double
With Sheets("Tabelle2")
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
Have fun,
Bernd P