Eine Ausgaberoutine für 4 Functionen mit Titel übernahme

WaZZkeSS

Erfahrenes Mitglied
Hi!
Ich habe folgendes Problem , und vielleicht kann mir ja jemand helfen.

Ich habe in der Main Menü eine Inputbox mit einer Slect Case Function. Jenach was man auswählt, springt er dan zu der jeweiligen Function.
In der Function soll die Berechnung statt finden.
Die Ausgabe der Ergebnisse sollen in einer eigenen Ausgaberoutinen erfolgen.
Meine Frage jetzt, wie kann ich von jeder Function die Ergebnisse in der selben Ausgaberoutine anzeigen lassen, so das der Titel von der jeweiligen Rechnung angezeigt wird. Bsp. Rechteck. In der Main 1 wählen, länge und breite eingeben, in der Function wird es berechnet, in der Function wird noch eine Function aufgerufen für die Ausgabe und der Titelname ist Rechteck. Jetzt sollte die gleiche Ausgaberoutine
Code:
  Public Function ausgabeRE(ByVal flächeRE As Single, ByVal umfangRE As Single)
für Kreis verwendet werden, wo der Titel mitübergeben wird.


Main
Code:
  Dim auswahl As Integer
  Dim länge As Single
  Dim breite As Single
  Dim seite As Single
  Dim radius As Single
  Dim rwdreiecka As Single
  Dim rwdreieckb As Single
  Dim fläche As Single
  
 		 auswahl = InputBox("Wählen Sie bitte einen Rechenvorgang aus." & vbCrLf & _
  			"" & vbCrLf & _
  			"1 für Rechteck" & vbCrLf & _
  			"2 für Quadrat" & vbCrLf & _
  			"3 für Kreis" & vbCrLf & _
  			"4 für RW Dreieck")
  			
  			
  			Select Case (auswahl)
  			
  				Case 1
 				 länge = InputBox("Geben Sie die Länge ein.")
 				 breite = InputBox("Geben Sie die Breite ein.")				 
 				 fläche = BerechneREfläche(länge, breite)
  				
  				Case 2
  					.
  					.
  				Case 3
  					. 
  					.
  				Case 4
  				   .
  				   .
  			End Select


Function
Code:
  Public Function BerechneREfläche(ByRef länge As Single, ByRef breite As Single)
  
  Dim flächeRE As Single
  Dim umfangRE As Single
  Dim ergebnis As Single
  			
  			flächeRE = länge * breite
  			umfangRE = (länge + breite) * 2
  			
  			BerechneREfläche = flächeRE
  			BerechneREfläche = umfangRE
  
  		ergebnis = ausgabeRE(flächeRE, umfangRE)
  		
  End Function


Ausgabe
Code:
  Public Function ausgabeRE(ByVal flächeRE As Single, ByVal umfangRE As Single)
  
  		MsgBox "Der Umfang beträgt: " & umfangRE & vbCrLf & _
  		"Die Fläche beträgt: " & flächeRE, 64
      
  End Function
 
Hallo WaZZkeSS,

du könntest deine gesamten Variablen verallgemeinern. Somit könntest du etwa ein Modul benutzen und dort die Variablen mithilfe von "Public" eintragen.
Wenn jetzt in einer Funktion eine Berechnung durchgeführt wird, bleibt das Ergebnis auch in der Variable, wenn die Funktion beendet ist und kann somit auch mit einer anderen Funktion übernommen werden.
Soweit die Theorie.
Jetzt hast du also deine Funktion, die die Fläche eines rechtwinkligen Dreiecks berechnet. Die Ergebnisse werden beispielsweise in die Public-Variable "fläche" geschrieben, welche auch von den anderen geometrischen Formen benutzt wird. Danach setzt du an das Ende der Funktion den Code "ausgabeRE", die die Variable "fläche" in einer MessageBox ausgibt.
Das gleiche machst du mit den anderen Geometrischen Formen und verweist an den entsprechenden Funktionen immer auf "ausgabeRE".
Soweit ein bischen die Praxis.

(//EDIT: Natürlich hat auch der Titel eine Public-Variable und wird ausgegeben)

Ich hoffe ich habe alles verstanden und konnte dir wenigstens etwas helfen.

Ciao:
Da' Hacker
 
Hi!

Du musst beim übergeben der Function die fläche und den Umfang mitgeben und die Variablem gleich in der Main deklarieren.

Bsp:
Code:
  Dim auswahl As Integer
  Dim länge As Single
  Dim breite As Single
  Dim fläche As Single
  Dim title As String
  Dim flächeRE As Single
  Dim umfangRE As Single

 ' Dim seite As Single     <-----brauchst du nichtdeklarieren,  kannst die Variable länge
 ' Dim radius As Single   <-----und evtl. breite für jeden Vorgang nehemen
 ' Dim rwdreiecka As Single
 ' Dim rwdreieckb As Single                
   
 		 auswahl = InputBox("Wählen Sie bitte einen Rechenvorgang aus." & vbCrLf & _
  			"" & vbCrLf & _
  			"1 für Rechteck" & vbCrLf & _
  			"2 für Quadrat" & vbCrLf & _
  			"3 für Kreis" & vbCrLf & _
  			"4 für RW Dreieck")
  			
  			
  	Select Case (auswahl)
  			
  	Case 1
                    länge = InputBox("Geben Sie die Länge in Meter ein.")
                    breite = InputBox("Geben Sie die Breite in Meter ein.")
                    fläche = BerechneRE(länge, breite, flächeRE, umfangRE)  <---du musst die                                            '                                                                                               Werte gleich mitgeben.
                    title = "Rechteck"
                    Call ausgabeRE(flächeRE, umfangRE, title)
                     ...
                     ...
                     ...
                     ...
__________________________________________________________________________
Public Function BerechneRE(ByVal länge As Single, ByVal breite As Single, _
                            ByRef flächeRE As Single, ByRef umfangRE As Single)
' hier übergibst 'du die Werte, und mit ByRef nimmst du den Wert vom Speicher weg und übergibst es. 'Das brauchst du dann. Variablen brauchst du auch nicht zu deklarieren weil die bei der 'übergabe schon deklariert wurden.

            flächeRE = länge * breite
            umfangRE = (länge + breite) * 2
                   
End Function
__________________________________________________________________________

Public Sub ausgabRE(ByVal flächeRE As Single, ByVal umfangRE As Single, ByVal titel As String) ' Hier übergibst alles mit der Richtigen Titel.

        MsgBox "Der Umfang beträgt: " & umfangRE & " m " & vbCrLf & _
        "Die Fläche beträgt: " & flächeRE & " m² ", 64, titel
    
End Sub


Hoffa ich habe helfen können
 
Danke für die Antworten hat mir sehr geholfen.

Habe jetzt ein anderes Problem, ich möchte jetzt eine fehlerbehandlung mit einer Schleife machen.
Wenn ich die Sßchleife in der Main Sub mache fumktioniert es.
Bsp.
Code:
 		Do
 		    Mainmenü = InputBox("Wählen Sie eine Berechnung aus!" & vbCrLf & _
 							    "1 für Rechteck" & vbCrLf & _
 							    "2 für Quadrat" & vbCrLf & _
 							    "3 für Kreis" & vbCrLf & _
 							    "4 für Rechtw. Dreieck", Title)
 				
 			   		   
 				    If Mainmenü = "" Then
 					    MsgBox "Geben Sie eine Zahl zwischen 1 bis 4 ein.", 16, Title
 					    chk = False
  					Else
 					    If Not IsNumeric(Mainmenü) Then
 						    MsgBox "Buchstaben sind nicht erlaubt.", 16, Title
 						    chk = False
 					    Else
 						    If Mainmenü > 4 Or Mainmenü < 1 Then
 							    MsgBox "Geben Sie eine Zahl zwischen 1 bis 4 ein.", 16, Title
 							    chk = False
 						    End If
 					    End If
  					End If
 			Loop Until chk = True
 
 		Select Case (Mainmenü)
 			
 			Case 1
 				Call Rechteck(chk)
 				
 		End Select
 
 End Sub

Aber wenn ich für alle Fehlerbehandlung die gleiche Function verwende funktioniert es nicht. Zumindest beim ersten nicht.
Bsp.

Code:
 		Do
 		    Mainmenü = InputBox("Wählen Sie eine Berechnung aus!" & vbCrLf & _
 							    "1 für Rechteck" & vbCrLf & _
 							    "2 für Quadrat" & vbCrLf & _
 							    "3 für Kreis" & vbCrLf & _
 							    "4 für Rechtw. Dreieck" & vbCrLf & _
 				
 				chk = Fehlerbehandlung(Mainmenü)
 
 			Loop Until chk = True
 
 
 		Select Case (Mainmenü)
 			
 			Case 1
 				Call Rechteck(chk)
 
 				
 		End Select
 
 End Sub
 
 Private Function Fehlerbehandlung(ByVal passtes As String, Optional ByVal chk As Boolean)
 
 			chk = True
 				    If passtes = "" Then
 					    MsgBox "Geben Sie eine Zahl zwischen 1 bis 8 ein.", 4, Title
 					    chk = False
 					Else
 					    If Not IsNumeric(passtes) Then
 						    MsgBox "Buchstaben sind nicht erlaubt.", 16, Title
 						    chk = False
 					    Else
 						    If passtes > 4 Or passtes < 1 Then
 							    MsgBox "Geben Sie eine Zahl zwischen 1 bis 4 ein.", 16, Title
 							    chk = False
 						    End If
 					    End If
 					End If
 				
 End Function

Ich wäre sehr Dankbar wenn mir das jemand erklären könnte, warum die Schleife wiederholt und nicht weiter geht auch wenn die eingabe zwischen 1 bis 4 ist. Ich habe es auch mit verschieden If Bedingungen probiert, die ich jetzt hier nicht reinschmeissen möchte sonst wäre der Code eibisschen länger. Danke im vorraus

WaZZkeSS
 
Hah, ich hab´s.

ich hab den chk in die Fehlerbehandlugn Function mitgegeben und in der Function die Variable Mainmenü als ByVal und chk als ByRef übergeben sowie wie ksk gemeint hat.
Trotzdem Danke nochmals.


WaZZkeSS
 

Neue Beiträge

Zurück