Option Explicit

Function  provisionMitBenutzerdefinierterFunktion(umsatzEingabe  As String , verkaufsbetragEingabe  As String )
     ' Dateiname: provisionMitBenutzerdefinierterFunktion
     Dim  umsatz  As Double
    
Dim  verkaufsbetrag  As Double
    
Dim  eingabe  As String
    
If   Not  ueberpruefe_Benutzereingaben(umsatzEingabe, _
                                        verkaufsbetragEingabe, umsatz, verkaufsbetrag) 
Then   Exit Function
            provisionMitBenutzerdefinierterFunktion = berechne_Provision(umsatz, verkaufsbetrag)
End Function


Private Function  ueberpruefe_Benutzereingaben( ByVal  umsatzEingabe  As String , _
                                        
ByVal  verkaufsbetragEingabe  As String , _
                                        umsatz 
As Double , _
                                        verkaufsbetrag 
As Double As Boolean
    ueberpruefe_Benutzereingaben = 
True
    
If   Not   wandle_in_Double_um(umsatzEingabe, umsatz)  Then
        ueberpruefe_Benutzereingaben = 
False
        MsgBox ("Der erste Parameter (umsatz) der Funktion ist keine Zahl!")
        
Exit Function
    
End If
    
If   Not  wandle_in_Double_um(verkaufsbetragEingabe, verkaufsbetrag)  Then
        ueberpruefe_Benutzereingaben = 
False
        MsgBox ("Der zweite Parameter (verkaufsbetrag) der Funktion ist keine Zahl!")
        
Exit Function
    
End If
    
If  verkaufsbetrag > umsatz  Then
        MsgBox ("Umsatz muß gr\'a8oßer gleich Verkaufsbetrag sein!")
        ueberpruefe_Benutzereingaben = 
False
        
Exit Function
    
End If
End Function


Private Function  berechne_Provision( ByVal  umsatz  As Double ByVal  verkaufsbetrag  As Double As Double
    
Dim  provisionInProzent  As Double
    
' Umsatzgrenzen sind DM-Betraege
     Const  umsatzGrenze1  As Double  = 100000
    
Const  umsatzGrenze2  As Double  = 500000
    
Const  umsatzGrenze3  As Double  = 1000000
    
' Provisionen in Prozent
     Const  provisionUmsatzGrenze1  As Double  = 5
    
Const  provisionUmsatzGrenze2  As Double  = 10
    
Const  provisionUmsatzGrenze3  As Double  = 20
    
' Bestimme Provision
     If  umsatz >= umsatzGrenze3  Then
            provisionInProzent = provisionUmsatzGrenze3
        
ElseIf  umsatz >= umsatzGrenze2  Then
            provisionInProzent = provisionUmsatzGrenze2
        
ElseIf  umsatz >= umsatzGrenze1  Then
            provisionInProzent = provisionUmsatzGrenze1
        
Else
            provisionInProzent = 0
    
End If
    
' Berechne die Provision
    berechne_Provision = (verkaufsbetrag * provisionInProzent) / 100
End Function


Private Function  wandle_in_Double_um( ByVal  eingabe  As String , rueckgabe  As Double As Boolean
    wandle_in_Double_um = 
True
    
If   Not  IsNumeric(eingabe)  Then
        MsgBox ("Der von Ihnen eingegebene Wert muß eine Zahl sein! ")
        wandle_in_Double_um = 
False
        
Exit Function
    
End If
    rueckgabe = 
CDbl (eingabe)
End Function