Option Explicit
Private Sub AuswahlButton_Click()
On Error GoTo Fehlerbehandlung
Dim Laenge As Integer
Dim Breite As Integer
Dim Hoehe As Integer
Dim Entfernung As Integer
Dim Gewicht As Integer
Laenge = wandle_in_double_um(LaengeInput.Text)
Breite = wandle_in_double_um(BreiteInput.Text)
Hoehe = wandle_in_double_um(HoeheInput.Text)
Entfernung = wandle_in_double_um(EntfernungInput.Text)
Gewicht = wandle_in_double_um(GewichtInput.Text)
pruefe_ob_positiv Laenge
pruefe_ob_positiv Breite
pruefe_ob_positiv Hoehe
pruefe_ob_positiv Entfernung
pruefe_ob_positiv Gewicht
pruefe_entfernung Entfernung
pruefe_masse Laenge, Breite, Hoehe
plausi_gewicht Gewicht
DienstleisterOutput.Text = bestimme_dienstleister(Laenge, Breite, Hoehe, Gewicht, Entfernung)
Exit Sub
Fehlerbehandlung:
MsgBox ("Fehler: " & Err.Description)
End Sub
Function bestimme_dienstleister(ByVal Laenge As Integer, ByVal Breite As Integer, _
ByVal Hoehe As Integer, ByVal Gewicht As Integer, ByVal Entfernung As Integer) _
As String
Const WPS_ENTFERNUNG As Integer = 50
Const UPS_GEWICHT As Integer = 50
Const KUBIK As Long = 1000000
Dim Volumen As Long
Volumen = berechne_volumen(Laenge, Breite, Hoehe)
If Entfernung < WPS_ENTFERNUNG Then
bestimme_dienstleister = "WPS"
ElseIf Volumen < KUBIK Then
bestimme_dienstleister = "DHL"
ElseIf Volumen < 2 * KUBIK Then
bestimme_dienstleister = "UPS"
ElseIf Gewicht < UPS_GEWICHT Then
bestimme_dienstleister = "UPS"
Else
bestimme_dienstleister = "DHL"
End If
End Function
Function berechne_volumen(ByVal Laenge As Integer, ByVal Breite As Long, ByVal Hoehe As Long) As Long
berechne_volumen = Laenge * Breite * Hoehe
End Function
Sub plausi_gewicht(ByVal Gewicht As Integer)
Const MAX_GEWICHT As Integer = 100
If Gewicht > MAX_GEWICHT Then
MsgBox ("Das Gewicht ist sehr hoch! Sicher?")
End If
End Sub
Sub pruefe_masse(ByVal Laenge As Integer, ByVal Breite As Integer, ByVal Hoehe As Integer)
If Laenge = Breite And Breite = Hoehe Then
Err.Raise 5003, "pruefe_masse", "Alle Seiten sind gleich lang"
End If
If Laenge + Breite > Hoehe Then
Err.Raise 5004, "pruefe_masse", "Laenge plus Breite größer Höhe"
End If
End Sub
Sub pruefe_ob_positiv(ByVal zahl As Integer)
If zahl <= 0 Then
Err.Raise 5001, "pruefe_ob_positiv", "Nur positive Zahlen eingeben!"
End If
End Sub
Sub pruefe_entfernung(ByVal Entfernung As Integer)
Const maxEntfernung As Integer = 1000
If Entfernung > maxEntfernung Then
Err.Raise 5002, "pruefe_entfernung", "Entfernung zu groß"
End If
End Sub
Function wandle_in_double_um(ByVal eingabe As String) As Double
If Not IsNumeric(eingabe) Then
Err.Raise 5000, "wandle_in_double_um", "Alle Eingaben müssen Zahlen sein."
End If
wandle_in_double_um = CDbl(eingabe)
End Function