Option Explicit
Private Sub berechnenButton_Click()
' Fehlerbehandlung
On Error GoTo Fehleranzeigen
' Variablen deklarieren
Dim wzcode As Double
Dim abrufeMitGuV As Integer
Dim abrufeOhneGuV As Integer
Dim rest As Integer
Dim preis As Double
Dim preisOhne As Double
Dim gesamtpreis As Double
' Konstanten deklarieren
Const anzahlBilanzenFuerPeergroup4 As Integer = 4
Const anzahlBilanzenFuerPeergroup3 As Integer = 3
Const anzahlBilanzenFuerPeergroup2 As Integer = 2
Const mindermengenZuschlag As Double = 50
Const mindermengenGrenze = 500
Const rabatt As Double = 0.8
Const rabattGrenze As Long = 10000
Const peergroup2 As Double = 100
Const peergroup3 As Double = 140
Const peergroup4 As Double = 170
Const bilanzen2 As Double = 80
Const bilanzen3 As Double = 110
Const bilanzen4 As Double = 130
preis = 0
preisOhne = 0
gesamtpreis = 0
' Daten holen
wzcode = wandle_in_long_um(WzcodeInput.Text)
abrufeMitGuV = wandle_in_int_um(MitGuVInput.Text)
abrufeOhneGuV = wandle_in_int_um(OhneGuVInput.Text)
' Eingaben überprüfen
pruefeBranchenCode wzcode
pruefeObBank wzcode
pruefeObPositiveZahl abrufeMitGuV
pruefeObPositiveZahl abrufeOhneGuV
' Bilanzen mit GuV
rest = dividiereDurchModulo(abrufeMitGuV, anzahlBilanzenFuerPeergroup4)
preis = (abrufeMitGuV \ anzahlBilanzenFuerPeergroup4) * peergroup4
If rest = anzahlBilanzenFuerPeergroup3 Then
preis = preis + peergroup3
ElseIf rest < anzahlBilanzenFuerPeergroup3 And rest > 0 Then
preis = preis + peergroup2
End If
' Bilanzen ohne GuV
rest = dividiereDurchModulo(abrufeOhneGuV, anzahlBilanzenFuerPeergroup4)
preisOhne = (abrufeOhneGuV \ anzahlBilanzenFuerPeergroup4) * bilanzen4
If rest = anzahlBilanzenFuerPeergroup3 Then
preisOhne = preisOhne + bilanzen3
ElseIf rest < anzahlBilanzenFuerPeergroup3 And rest > 0 Then
preisOhne = preisOhne + bilanzen2
End If
' Mindermengen sowie Rabatt prüfen
If preis + preisOhne > rabattGrenze Then
gesamtpreis = (preis + preisOhne) * rabatt
End If
If preis + preisOhne < mindermengenGrenze And preis + preisOhne > 0 Then
MsgBox ("Mindermengenzuschlag")
gesamtpreis = preis + preisOhne + mindermengenZuschlag
End If
If gesamtpreis <> 0 Then
PreisOutput.Text = gesamtpreis
Else
PreisOutput.Text = preis + preisOhne
End If
Exit Sub
Fehleranzeigen:
MsgBox ("Folgender Fehler ist leider aufgetreten: " & Err.Description)
End Sub
Function wandle_in_int_um(ByVal eingabe As String) As Integer
If Not IsNumeric(eingabe) Then
Err.Raise 5000, "wandle_in_int_um", "Bitte nur Zahlen eingeben"
End If
wandle_in_int_um = CInt(eingabe)
End Function
Function wandle_in_long_um(ByVal eingabe As String) As Long
If Not IsNumeric(eingabe) Then
Err.Raise 5004, "wandle_in_long_um", "Bitte nur Zahlen eingeben"
End If
wandle_in_long_um = CLng(eingabe)
End Function
Sub pruefeObPositiveZahl(ByVal zahl As Integer)
If zahl < 0 Then
Err.Raise 5001, "pruefeObPositiveZahl", "Zahl muss positiv sein"
Exit Sub
End If
End Sub
Sub pruefeObBank(ByVal wzcode As Long)
If wzcode >= 80000 And wzcode < 90000 Then
Err.Raise 5002, "pruefeObBank", "Branchencodes beginnend mit einer 8 sind unzulaessig"
Exit Sub
End If
End Sub
Sub pruefeBranchenCode(ByVal wzcode As Long)
If wzcode <= 9999 Or wzcode > 99999 Then
Err.Raise 5003, "pruefeBranchenCode", "Branchencode ist eine fuenfstellige Zahl"
Exit Sub
End If
End Sub
Function dividiereDurchModulo(abrufeMitGuV, dividend) As Integer
dividiereDurchModulo = abrufeMitGuV Mod dividend
End Function