Option Explicit
Sub zinsberechnung()
    
' Programm berechnet die monatliche Belastung
    ' bei einzugebendem Kaufpreis und Eigenkapital
    ' Dateiname: funktionen11
    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
    Gib_Programmbeschreibung_aus
    eingabe = Lies_den_Immobilienpreis_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 = Lies_den_Immobilienpreis_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 Gib_Programmbeschreibung_aus()
        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")
End Sub

Function Lies_den_Immobilienpreis_ein() As String
    Lies_den_Immobilienpreis_ein = InputBox("Geben Sie jetzt den Kaufpreis ein!")
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
    
If Not IsNumeric(eingabe) Then
        MsgBox ("Kaufpreis muß eine Zahl sein!")
        fehler = 
True
        
Exit Sub
    
End If
    immobilienpreis = 
CDbl(eingabe)
    eingabe = InputBox("Geben Sie nun ihr Eigenkapital ein!")
    
If Not IsNumeric(eingabe) Then
        MsgBox ("Eigenkapital muß eine Zahl sein!")
        fehler = 
True
        
Exit Sub
    
End If
    eigenkapital = 
CDbl(eingabe)
    eingabe = InputBox("Geben Sie nun ihre Zinsklasse ein!")
    
If Not IsNumeric(eingabe) Then
        MsgBox ("Zinsklasse muß eine Zahl sein!")
        fehler = 
True
        
Exit Sub
    
End If
    zinsKlasse = 
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