Option Explicit

Sub zinsberechnung()
    
' Programm berechnet die monatliche Belastung
    ' bei einzugebendem Kaufpreis und Eigenkapital
    ' Dateiname: funktionen13
    Dim eingabe As String
    
Dim eigenkapital As Double
    
Dim immobilienpreis As Double
    
Dim aufzunehmenderBetrag As Double
    
Dim monatlicheBelastung As Double
    
Dim zinsKlasse As Integer
    
Dim fehler As Boolean
    MsgBox ("Bitte geben Sie Ihr Eigenkapital und den " _
            & Chr$(13) & "Kaufpreis ein, sowie die Ihnen zugeteilte" _
            & Chr$(13) & " Zinsklasse ein! Sie beenden das Programm," _
            & Chr$(13) & " indem Sie beenden als Kaufpreis angeben")
    eingabe = InputBox("Geben Sie jetzt den Kaufpreis ein! ")
    
Do While eingabe <> "beenden"
        
If Not Lies_restliche_und_ueberpruefe_alle_Benutzereingaben(eingabe, _
                                                                    immobilienpreis, _
                                                                    eigenkapital, _
                                                                    zinsKlasse) 
Then Exit Sub
        
If Not fuehre_Berechnungen_durch(eigenkapital, _
                                         immobilienpreis, _
                                         zinsKlasse, _
                                         monatlicheBelastung) 
Then Exit Sub
        
' Gib Ergebnisse aus
        MsgBox ("Ihre monatliche Belastung ist: " & monatlicheBelastung & " DM")
        eingabe = InputBox("Geben Sie jetzt den Kaufpreis ein! ")
    
Loop
End Sub

Function berechne_Eigenkapitalquote(ByVal eigenkapital As Double, _
                                    
ByVal immobilienpreis As DoubleAs Boolean
    
Dim eigenkapitalquote As Double
    berechne_Eigenkapitalquote = 
True
    eigenkapitalquote = (eigenkapital / immobilienpreis) * 100
    
If eigenkapitalquote < 30 Then
        MsgBox ("Ihre Eigenkapitalquote " & eigenkapitalquote & _
                "% ist zu niedrig! ")
        berechne_Eigenkapitalquote = 
False
        
Exit Function
    
End If
End Function

Function Monatliche_Belastung_berechnen(ByVal immobilienpreis As Double, _
                                        
ByVal eigenkapital As Double, _
                                        
ByVal zinsKlasse As IntegerAs Double
    
Const tilgung As Double = 1
    
Dim aufzunehmenderBetrag As Double
    
Dim jahresBelastung As Double
    
Dim eigenkapitalquote As Double
    aufzunehmenderBetrag = immobilienpreis - eigenkapital
    jahresBelastung = (aufzunehmenderBetrag / 100) * (zinsKlasse + tilgung)
    Monatliche_Belastung_berechnen = jahresBelastung / 12
End Function

Function Lies_restliche_und_ueberpruefe_alle_Benutzereingaben(ByVal eingabe As String, _
                                                                immobilienpreis 
As Double, _
                                                                eigenkapital 
As Double, _
                                                                zinsKlasse 
As IntegerAs Boolean
    Lies_restliche_und_ueberpruefe_alle_Benutzereingaben = 
True
    
If Not wandle_in_Double_um(eingabe, immobilienpreis) Then
        Lies_restliche_und_ueberpruefe_alle_Benutzereingaben = 
False
        
Exit Function
    
End If
    eingabe = InputBox("Geben Sie nun ihr Eigenkapital ein! ")
    
If Not wandle_in_Double_um(eingabe, eigenkapital) Then
        Lies_restliche_und_ueberpruefe_alle_Benutzereingaben = 
False
        
Exit Function
    
End If
    eingabe = InputBox("Geben Sie nun ihre Zinsklasse ein! ")
    
If Not wandle_in_Integer_um(eingabe, zinsKlasse) Then
        Lies_restliche_und_ueberpruefe_alle_Benutzereingaben = 
False
        
Exit Function
    
End If
End Function

Function wandle_in_Double_um(ByVal eingabe As String, rueckgabe As DoubleAs 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

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

Function fuehre_Berechnungen_durch(ByVal eigenkapital As Double, _
                                    
ByVal immobilienpreis As Double, _
                                    
ByVal zinsKlasse As Integer, _
                                    monatlicheBelastung 
As DoubleAs Boolean
    
Const zinsKlasse1 As Double = 5.5
    
Const zinsKlasse2 As Double = 5.3
    
Const zinsKlasse3 As Double = 5.2
    
Const zinsKlasse4 As Double = 5#
    
Const zinsKlasse5 As Double = 4.5
    fuehre_Berechnungen_durch = 
True
    
If Not berechne_Eigenkapitalquote(eigenkapital, immobilienpreis) Then
        fuehre_Berechnungen_durch = 
False
        
Exit Function
    
End If
    
Select Case zinsKlasse
        
Case 1
            monatlicheBelastung = Monatliche_Belastung_berechnen(immobilienpreis, eigenkapital, zinsKlasse4)
        
Case 2
            monatlicheBelastung = Monatliche_Belastung_berechnen(immobilienpreis, eigenkapital, zinsKlasse4)
        
Case 3
            monatlicheBelastung = Monatliche_Belastung_berechnen(immobilienpreis, eigenkapital, zinsKlasse4)
        
Case 4
            monatlicheBelastung = Monatliche_Belastung_berechnen(immobilienpreis, eigenkapital, zinsKlasse4)
        
Case 5
            monatlicheBelastung = Monatliche_Belastung_berechnen(immobilienpreis, eigenkapital, zinsKlasse4)
        
Case Else
            MsgBox ("Sie haben eine falsche Zinsklasse eingegeben! " & _
                    "Zinsklasse muß kleiner gleich 5 sein! ")
            fuehre_Berechnungen_durch = 
False
            
Exit Function
    
End Select
End Function