Makro: Werte auslesen, vorhandene kumulieren
btc
Vor kurzem bin ich dank 'Oberschlumpf' Thorsten meinem Gesamtziel eines Speisenkalkulationsfiles schon sehr viel näher gekommen. Leider habe ich mich beim Weitermachen beim nächsten Schritt etwas verheddert.
Hier zunächst mal die komplette Datei im konvertierten 2003er Format:
https://www.herber.de/bbs/user/65591.xls
Hier ist die gesamte Idee des fertigen Files:
Ein User gibt im Sheet 'Vorlage' den Namen und die Zutaten eines Gerichtes ein(für jeweils 100 Portionen). Bereits vorher einmal eingegebene Artikel sind im Sheet 'Preisliste' hinterlegt und per Dropdown verfügbar.
Nach fertiger Eingabe und Auslösen des ersten Buttons werden:
-Die Artikel mit Einheit und Preis in die Preisliste übertragen und alphabetisch sortiert, wenn sie noch nicht drinstehen
-Name des Gerichts und kalkulierter Bruttoverkaufspreis in das Sheet 'Preisempfehlungen' übertragen
-Der Name nochmals separat im Sheet 'Gerichtesammlung für Bestellung' gespeichert
-Das kalkulierte Gericht als neues Sheet mit dem Namen des Gerichts gespeichert
-die Vorlage zurückgesetzt.
Falls das Gericht als Beilage verwendet werden soll(z.B. Kartoffelsalat), kann man mittels dem zweiten Button dieses Gericht als Beilage in die Preisliste übertragen. Hierbei wird der Name des Gerichts mit "*" vorne versehen und ebenfalls als Artikel in das Sheet 'Preisliste' kopiert.
Bis hierhin funktioniert es dank Thorsten jetzt einwandfrei.
Nun der weitere Plan:
Im Sheet 'Gerichtesammlung für Bestellung' stehen in Spalte A alle Gerichte, in Spalte B kann man eine geschätzte Verkaufsmenge eintragen. Per Button soll nun folgendes passieren:
-jede Zeile in Spalte B wird überprüft. Ist der Wert über 0, geht es weiter:
-Der Name des Gerichts neben dem Wert wird übernommen (zB. Schnitzel)
-Es wird in das entsprechende Sheet gewechselt
-die Artikel der jeweiligen Kalkulation werden mit ihren Werten kopiert und in das Sheet 'Bestellliste' übertragen
-dabei wird schon die richtige Menge errechnet -> (Kalkulationsmenge / 100) * Verkaufsmenge
-sollten die Artikel schon in der Bestellliste stehen, werden nur die Werte kumuliert
Hier habe ich das erste Problem. Ich habe mir einen Code zusammengeschraubt, der wie folgt aussieht:
Sub GerichtesammlungfürBestellung_RoundedRectangle1_Click()
Dim Anzahl, Anzahl2, Startzeile, i, Umfang, Preis, KalkM, kalkM2 As Integer
Dim c, c2 As Range
Dim NameGericht, Artikel, Einheit As String
For Each c In ActiveSheet.Range("b2:b500")
If c.Value = 0 Then GoTo sprung Else
NameGericht = c.Offset(0, -1).Value
Anzahl = c.Value
Sheets(NameGericht).Select
Anzahl2 = WorksheetFunction.CountA(Sheets(NameGericht).Range("A3:A20"))
For i = 1 To Anzahl2
Startzeile = i + 2
Artikel = Sheets(NameGericht).Cells(Startzeile, 1).Value
Umfang = Sheets(NameGericht).Cells(Startzeile, 2).Value
Einheit = Sheets(NameGericht).Cells(Startzeile, 3).Value
Preis = Sheets(NameGericht).Cells(Startzeile, 4).Value
KalkM = (Umfang * Anzahl) / 100
Sheets("Bestellliste").Select
For Each c2 In Sheets("Bestellliste").Range("a2:a500")
If c2.Value = Artikel Then
kalkM2 = c2.Offset(0, 1).Value + KalkM
c2.Offset(0, 1).Value = kalkM2
GoTo sprung2
Else
Cells(65000, 1).End(xlUp).Offset(1, 0).Value = Artikel
Cells(65000, 2).End(xlUp).Offset(1, 0).Value = KalkM
Cells(65000, 3).End(xlUp).Offset(1, 0).Value = Einheit
Cells(65000, 4).End(xlUp).Offset(1, 0).Value = Preis
GoTo sprung2
End If
Next c2
sprung2:
Next i
sprung:
Next c
End Sub
Leider wird hierbei nur die erste Zeile der Bestellliste gecheckt und bei Bedarf kumuliert, alle anderen Artikel werden doppelt eingetragen. Auch nach längerem Hin- und Hercodieren finde ich keine Lösung, wo mein Fehler liegt.
Das zweite Problem:
Wenn in der Artikelliste eines Gerichtes eine kalkulierte Beilage (mit "*", zB "*Kartoffelsalat" _
) vorkommt, dann sollen die einzelnen Artikel der Beilage auch ausgelesen werden. Meine Idee _ war, jeweils nach dem Kopieren einer Artikelzeile im Makro folgende Bedingung einzufügen:
If Left(Artikel, 1) = "*" Then ArtikelBeilage = Right(Artikel, Len(Artikel) - 1)
Damit hätte ich als String 'ArtikelBeilage' den Namen des Sheets, in dem die entsprechende Beilage kalkuliert ist und könnte dann dorthin wechseln und mit den einzelnen Artikeln auch so verfahren wie oben genannt.
Leider komme ich mit der richtigen Verschachtelung und einer sinnvollen Codierung nicht zurecht. Beim Versuch, dies auch noch einzubauen, bricht mein Makro leider völlig zusammen.
Gibt es jemanden, der mir hier einen Weg aufzeigen kann, wie ich das Ganze zum Laufen bringe?
Da meine spärlichen VBA-Kenntnisse nur selbst-'ergooglet' sind, übersehe ich eventuell einen einfacheren oder sinnvolleren Weg, darum hoffe ich auf eine Erleuchtung von einem der zahllosen Profis hier.
Vielen Dank schonmal fürs Lesen dieser langen Anfrage!
Gruß
Michael