public function im private sub aufrufen

deen_90

Erfahrenes Mitglied
Hallo

Wie kann ich eine Funktion in einem Sub aufrufen?

Hier könnt ihr den Code anschauen.
 

Anhänge

  • Code.txt
    80,9 KB · Aufrufe: 2.323

DrSoong

Iss was, Doc!
Also, im allgemeinen wird eine Funktion mit
Visual Basic:
Resultat = Funktion (Eingabewerte)
aufgerufen, dabei ist es egal, ob die Funktion Public oder Private ist. Schau dir zu dem Thema die VBA-Hilfe an, da werden die Funktionen gut erklärt.


Der Doc!
 

deen_90

Erfahrenes Mitglied
was ist der eingabewert?

also muss ich im Private Sub einfach

l.Resultat=Januar()

oder

Resualtat=Januar()

?
 

DrSoong

Iss was, Doc!
Nehmen wir mal an, du hast eine kleine Funktion, um z.B. das Quadrat einer Zahl zu berechnen:
Visual Basic:
Public Function Quadrat (ByVal sgZahl As Single) As Single
 'In der Funktion steht der übergebene Wert nun in der Variable sZahl, die Variable ist hier vom Datentyp Single
 'Jetzt kommt meine ganz einfache Berechnung:
 Quadrat = sgZahl * sgZahl
 'wie du siehst, ist meine Ausgabevariable gleich dem Namen der Funktion
End Function
Der Aufruf erfolgt setzt in deiner Prozedur so:
Visual Basic:
'Ich nehm hier das Click-Event eines CommandButtons
Private Sub Command1_Click()
 Dim sgWert As Single, sgErgebnis As Single
 'Ich leg hier einfach mal einen Wert fest, kannst du natürlich auch anders übergeben:
 sgWert = 12
 'Jetzt rufe ich die Funktion auf:
 sgErgebnis = Quadrat(sgWert)
 'und gebe das Ergebnis per MessageBox aus
 MsgBox "Das Quadrat von " & sgWert & " ist " & sgErgebnis
End Sub

Hoffe, das das Erklärung genug ist, ansonsten solltest du mal mit einem VB-Grundkurs liebäugeln.


Der Doc!
 

Tody83

Mitglied
@deen...

Hi... Mal ne Frage...

Das Teil was du da codest ist das für dich oder soll das dann auf einem anderen System laufen?

Die Frage ist berechtigt da du imense Probleme bekommst wenn du das Projekt auf einem anderen System startest...

Versuch den Code zum laden eines Monats Variabler zu gestalten...
Code nicht jedes Monat FIX sondern überleg die eine Routine die du dann immer mit Variablen startest.

Die Vorteile liegen auf der hand...
VBA wird dir dankbar sein da dein Code kleiner wird...
Du wirst dir selbst dankbar sein da du schneller und leichter das Projekt an andere Umgebungen und/oder Jahre anpassen kannst...

lg Tody
 

deen_90

Erfahrenes Mitglied
das ist eine aufgabe die mein ausbilder mir gegeben hat. ist nur eine übung damit ich meh ahnug für VBA bekomme
 

Tody83

Mitglied
Hi...

Dann musst du dir überlegen ob es sich auszahlt die Funktionen umzustellen...
Ich denke mal ja...

Die übersichtlichkeit im Code würde auch noch verbessert werden...
Hat positive Auswirkung auf eine Note falls du eine bekommen solltest....

lg Tody
 

deen_90

Erfahrenes Mitglied
Also ich habs jetzt mit verschiedenen Subs gemacht für jeden Monat. Wenn ich sie aufrufe, das mach ich jetzt so:

Code:
If monat=12 Then Call Dezember

Aber nachher macht er mir überhaupt nichts was in dem Sub steh. Die If-Anweisung hab ich dann auch weggenommen im Sub Dezember, aber dann macht er mir genau nur das erste und dann nicht mehr, dann zeigt er mir immer den Pfad falsch an der unteren. Aber der Pfad stemmt
 

Tody83

Mitglied
Hi...

So wie du das schilderst hört es sich an alls ob du nichts geändert hast...
Dann versteh ich auch nicht warum es nicht mehr geht...

Sei mit deinen Angaben bitte etwas prezieser...
Erläuter was du geändert hast und stell mehr code als die eine Zeile ein...

Was ich gemeint habe war das du EINE Funktion/Sub machst und die aufrufst...
Da du ja in jedem Monat fast den gleichen Code hast (Pfade sind anders soweit ich das gesehen hab)

Also eine Funktion... zB...
Visual Basic:
Function LoadFile(sJahr as String, sMonat as String)
   Dim sPath as String
   sPath = "C:\Auswertungen\" & sJahr & "\Daten_" & sJahr & "_" & sMonat & ".xls" 'Ergibt im Jahr 2008 und Monat 01 folgenden String - "C:\Auswertungen\2008\Daten_2008_01.xls"
   '...
   '... Weiterer Code der nun die Festgelegte Datei abarbeitet...
   '...

End Function

Das Teil könntest du dann so aufrufen...

Code:
ret = LoadFile("2008", "01")

oder

LoadFile "2008", "01"

Ich hoffe ich hab dir nun Verständlich gemacht was ich gemeint habe...

Lg Tody
 
Zuletzt bearbeitet: