Option Explicit

Private Sub BerechnenButton_Click()
    
Dim immobilienpreisString As String
    
Dim eigenkapitalString As String
    
Dim zinsKlasseString As String
    
Dim eigenkapital As Double
    
Dim immobilienpreis As Double
    
Dim zinsKlasse As Integer
    
Dim monatlicheBelastung As Double
    
    immobilienpreisString = ImmobilienpreisInput.Text
    eigenkapitalString = EigenkapitalInput.Text
    zinsKlasseString = ZinsklasseInput.Text
    
If Not ueberpruefe_alle_Benutzereingaben(immobilienpreisString, eigenkapitalString, zinsKlasseString, immobilienpreis, eigenkapital, zinsKlasse) Then Exit Sub
    
If Not fuehre_Berechnungen_durch(eigenkapital, immobilienpreis, zinsKlasse, monatlicheBelastung) Then Exit Sub
    MonatlicheBelastungInput.Text = monatlicheBelastung
End Sub

Private Function berechne_Eigenkapitalquote(ByVal eigenkapital As DoubleByVal 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

Private Function Monatliche_Belastung_berechnen(ByVal immobilienpreis As DoubleByVal eigenkapital As DoubleByVal zins As DoubleAs Double
    
Const tilgung As Double = 1
    
Dim aufzunehmenderBetrag As Double
    
Dim jahresBelastung As Double
    
Dim eigenkapitalquote As Double
    aufzunehmenderBetrag = immobilienpreis - eigenkapital
    jahresBelastung = (aufzunehmenderBetrag / 100) * (zins + tilgung)
    Monatliche_Belastung_berechnen = jahresBelastung / 12
End Function

Private Function ueberpruefe_alle_Benutzereingaben(ByVal immobilienpreisString As StringByVal eigenkapitalString As StringByVal zinsKlasseString As String, _
                                                    immobilienpreis 
As Double, _
                                                    eigenkapital 
As Double, _
                                                    zinsKlasse 
As Integer) _
                                                    
As Boolean
    ueberpruefe_alle_Benutzereingaben = 
True
    
If Not wandle_in_Double_um(immobilienpreisString, immobilienpreis) Then
        ueberpruefe_alle_Benutzereingaben = 
False
        MsgBox ("Immobilienpreis muss eine Zahl sein!")
        
Exit Function
    
End If

    
If Not wandle_in_Double_um(eigenkapitalString, eigenkapital) Then
        ueberpruefe_alle_Benutzereingaben = 
False
        MsgBox ("Eigenkapital muss eine Zahl sein!")
        
Exit Function
    
End If
    
    
If Not wandle_in_Integer_um(zinsKlasseString, zinsKlasse) Then
        ueberpruefe_alle_Benutzereingaben = 
False
        MsgBox ("Zinsklasse muss eine Zahl sein!")
        
Exit Function
    
End If
End Function
Private 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

Private 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

Private Function fuehre_Berechnungen_durch(ByVal eigenkapital As Double, _
                                            
ByVal immobilienpreis As Double, _
                                            
ByVal zinsKlasse As Integer, _
                                            monatlicheBelastung 
As Double) _
                                            
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
    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, 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! ")
            fuehre_Berechnungen_durch = 
False
            
Exit Function
        
End Select
End Function