Option Explicit
Sub zinsberechnung()
    
' Programm berechnet die monatliche Belastung
    ' bei einzugebendem Kaufpreis und Eigenkapital
    ' Dateiname: funktionen12
    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"
        Lies_restliche_und_ueberpruefe_alle_Benutzereingaben eingabe, _
                                                                immobilienpreis, _
                                                                eigenkapital, _
                                                                zinsKlasse, _
                                                                fehler
        
If fehler Then
            
Exit Sub
        
End If
        fuehre_Berechnungen_durch eigenkapital, immobilienpreis, _
        zinsKlasse, monatlicheBelastung, fehler
        
If fehler Then
            
Exit Sub
        
End If
        
' 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 Double) _
                                    
As Boolean
    
Dim eigenkapitalquote As Double
    berechne_Eigenkapitalquote = 
False
    eigenkapitalquote = (eigenkapital / immobilienpreis) * 100
    
If eigenkapitalquote < 30 Then
        MsgBox ("Ihre Eigenkapitalquote " & eigenkapitalquote & _
                "% ist zu niedrig!")
        berechne_Eigenkapitalquote = 
True
        
Exit Function
    
End If
End Function

Function Monatliche_Belastung_berechnen(ByVal immobilienpreis As Double, _
                                        
ByVal eigenkapital As Double, _
                                        
ByVal zinsKlasse As Integer) _
                                        
As 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

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

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

Sub wandle_in_Integer_um(ByVal eingabe As String, rueckgabe As Integer, _
                        fehler 
As Boolean)
    fehler = 
False
    
If Not IsNumeric(eingabe) Then
        MsgBox ("Der von Ihnen eingegebene Wert muß eine Zahl sein!")
        fehler = 
True
        
Exit Sub
    
End If
    rueckgabe = 
CInt(eingabe)
End Sub
Sub fuehre_Berechnungen_durch(ByVal eigenkapital As Double, _
                                
ByVal immobilienpreis As Double, _
                                
ByVal zinsKlasse As Integer, _
                                monatlicheBelastung 
As Double, _
                                fehler 
As 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
    fehler = 
False
    fehler = berechne_Eigenkapitalquote(eigenkapital, _
    immobilienpreis, fehler)
    
If fehler Then
        
Exit Sub
    
End If
    
Select Case zinsKlasse
        
Case 1
            monatlicheBelastung = Monatliche_Belastung_berechnen( _
            immobilienpreis, eigenkapital, zinsKlasse1)
        
Case 2
            monatlicheBelastung = Monatliche_Belastung_berechnen( _
            immobilienpreis, eigenkapital, zinsKlasse2)
        
Case 3
            monatlicheBelastung = Monatliche_Belastung_berechnen( _
            immobilienpreis, eigenkapital, zinsKlasse3)
        
Case 4
            monatlicheBelastung = Monatliche_Belastung_berechnen( _
            immobilienpreis, eigenkapital, zinsKlasse4)
        
Case 5
            monatlicheBelastung = Monatliche_Belastung_berechnen( _
            immobilienpreis, eigenkapital, zinsKlasse5)
        
Case Else
            MsgBox ("Sie haben eine falsche Zinsklasse eingegeben! " & _
                    "Zinsklasse muß kleiner gleich 5 sein!")
            fehler = 
True
                
Exit Sub
    
End Select
End Sub