VBA und Allgorithmus?
Hallo liebe VBA-Experten,
folgende Aufgabenstellung habe ich erhalten leider kommt immer eine Fehlermeldung s.h. Anlage.
bitte um Hilfe 🙏
3 Antworten
Wie die anderen schon sagen, ist "kosteninnen" eine Funktion, der du auch die Funktionsargumente übergeben musst. Also z.B.:
kostenaussen = (kosten + zusatzkosten + kosteninnen(innenvolumen(laenge-2, breite-2, hoehe-2))) * rabatt_1
Wobei beim Rest des Codes auch einige Dinge falsch oder zumindest anders sind, als ich sie verstehe:
- Beim Innenvolumen sollen pro mm³ 4 bzw. 3 Cent berechnet werden. Deine Funktion gibt insgesamt 4 Cent zurück, bzw. insgesamt 3 Cent, wenn das Volumen größer als ein Liter ist
- Außerdem sollen die 3 Cent ab dem 1000sten mm³ berechnet werden. Ich verstehe das so, dass bei einem Volumen über 1000mm³ für die ersten 1000mm³ insgesamt 40€ berechnet werden sollen und für alles, was über die 1000mm³ hinausgeht nur noch 3 Cent pro mm³. Also z.B. bei einem Gesamtvolumen von 1600mm³: 1000 * 0,04€ + 600 * 0,03€ = 58€
- Bei den Kostenaußen soll auch pro Millimeter ein Betrag berechnet werden und du hast nur einen Gesamtbetrag eingebaut
- Bei den If-Blöcken in der Kostenaußen-Funktion musst du drauf achten, dass jeder If-Block auch wieder mit einem End If geschlossen wird. So, wie es jetzt ist, wird die Breite nur geprüft, wenn die Höhe über 150mm ist und die Länge wird nur geprüft, wenn zusätzlich die Breite unter 10mm ist. Die ganze Funktion gibt nur ein Ergebnis zurück, wenn die Höhe über 150mm ist und die Breite unter 10mm ist.
- Wenn die Breite unter 10mm ist und gleichzeitig die Länge über 100mm ist, überschreiben die Zusatzkosten sich gegenseitig, so dass du am Ende nur Zusatzkosten von 0.3 hast, obwohl du eigentlich 0.9 haben wolltest.
- Du hast bei den Außenkosten einen Grundpreis von 1,50€ hinterlegt, obwohl es nur 1,20€ sein sollen.
Kann natürlich sein, dass ich an der Aufgabe auch was falsch verstehe, weil da astronomische Kosten rauskommen würden. Eine Kiste in der Größe eines Schuhkartons würde knappe 230.000€ kosten. Kann aber auch sein, dass das absichtliche Irreführung des Lehrers ist. Wie der Mann, der 30 Wassermelonen kauft oder der Hund, der 40km/h schnell laufen kann und daher in einer Woche 6720km schafft, ohne schlapp zu machen.
Wie die anderen schon angemerkt haben: Die Aufgabe lässt sich auch mit den Excel-Tabellenfunktionen lösen und soll vielleicht gar nicht in VBA gelöst werden.
Hier mal meine Interpretation des Codes:
Option Explicit
Public Function kostenKiste(laenge, breite, hoehe) As Currency
Dim innenVolumen As Long
innenVolumen = (laenge - 2) * (breite - 2) * (hoehe - 2)
Dim innenKosten As Currency
If innenVolumen <= 1000 Then
innenKosten = 0.04 * innenVolumen
Else
innenKosten = (1000 * 0.04) + ((innenVolumen - 1000) * 0.03)
End If
' Bei den Außenkosten wäre auch zu überlegen, ob die Werte für
' Länge, Höhe und Breite automatisch so sortiert werden sollen,
' dass immer die günstigste Lösung ermittelt wird
Dim kostenLaenge As Currency, kostenBreite As Currency, kostenHoehe As Currency
kostenHoehe = hoehe * 1.2
kostenLaenge = laenge * IIf(laenge > 100, 1.5, 1.2)
kostenBreite = breite * IIf(breite < 10, 1.8, 1.2)
' Anders, als bei den meisten anderen Programmiersprachen gibt VBA nicht
' sofort einen Wert zurück, wenn der Rückgabewert feststeht, daher kann
' man dem Rückgabewert etwas zuweisen und es nachträglich bei Bedarf ändern
kostenKiste = innenKosten + kostenHoehe + kostenLaenge + kostenBreite
If hoehe >= 150 Then kostenKiste = kostenKiste * 0.87
End Function
Wenn Du kosteninnen() aufrufst, erwartet die Funktion als Argument das Innenvolumen. Das fehlt hier.
Du solltest dir vllt erstmal ein Buch dazu kaufen und es ordentlich lernen. Das bringt dir mehr als sowas. Es gibt wirklich geniale Fachliteratur, auch zu vba.
Ja ist das stimmt, ist tatsächlich eine Aufgabe aus Wirtschaftsinformatik und erst am Anfang des Semesters
Wie gesagt, Buch hilft. War bei mir auch so :)
Du brauchst erstmal einen grundlegenden Blick für die Sprachen, dann erklärt sich wirklich viel selbst. Das bringt nix, wenn man dir einfach nur zeigt wie der Code aussehen muss. Du musst ihn verstehen.
Deine Funktion "kosteninnen" benötigt einen parameter. Dieser muss mitgegeben werden, damit diese Funktion vollständig aufgerufen wird.
kosteninnen(Zahl für das innenvolumen)
==
Aber: Bist du sicher dass dies mit VBA gelöst werden muss ?
Dies ist alles aus meiner Sicht mit native Excel Formeln möglich.
vielen Dank dir für den Hinweise, da ich erst neu mit VBA anfange, magst du kurz beschreiben wo genau ich jetzt was ändern muss