tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
22923
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    deen_90 deen_90 ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    114
    Hallo

    Wie kann ich eine Funktion in einem Sub aufrufen?

    Hier könnt ihr den Code anschauen.
    Angehängte Dateien Angehängte Dateien
     

  2. #2
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Also, im allgemeinen wird eine Funktion mit
    Code vb:
    1
    
    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!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  3. #3
    deen_90 deen_90 ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    114
    was ist der eingabewert?

    also muss ich im Private Sub einfach

    l.Resultat=Januar()

    oder

    Resualtat=Januar()

    ?
     

  4. #4
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Nehmen wir mal an, du hast eine kleine Funktion, um z.B. das Quadrat einer Zahl zu berechnen:
    Code vb:
    1
    2
    3
    4
    5
    6
    
    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:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    '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!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  5. #5
    Tody83 Tody83 ist offline Mitglied Silber
    Registriert seit
    Jan 2008
    Ort
    Kufstein
    Beiträge
    85
    Zitat Zitat von DrSoong Beitrag anzeigen
    Hoffe, das das Erklärung genug ist, ansonsten solltest du mal mit einem VB-Grundkurs liebäugeln.
    gg lieb gesagt... Liebäugeln...

    Doc darf ich dich mal was fragen?
    Welche sprachen kannst du alles?
    Wie alt?
    Seit wann spielst/arbeitest du mit PC's?

    lg Tody
     
    - Bitte erledigte Themen als erledigt Makieren
    - Bei Hilfe bitte die Beiträge bewerten

    Es gibt 10 Arten von Menschen
    - Jene die Binär verstehen und jene die es nicht tun...

  6. #6
    Tody83 Tody83 ist offline Mitglied Silber
    Registriert seit
    Jan 2008
    Ort
    Kufstein
    Beiträge
    85
    @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
     
    - Bitte erledigte Themen als erledigt Makieren
    - Bei Hilfe bitte die Beiträge bewerten

    Es gibt 10 Arten von Menschen
    - Jene die Binär verstehen und jene die es nicht tun...

  7. #7
    deen_90 deen_90 ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    114
    das ist eine aufgabe die mein ausbilder mir gegeben hat. ist nur eine übung damit ich meh ahnug für VBA bekomme
     

  8. #8
    Tody83 Tody83 ist offline Mitglied Silber
    Registriert seit
    Jan 2008
    Ort
    Kufstein
    Beiträge
    85
    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
     
    - Bitte erledigte Themen als erledigt Makieren
    - Bei Hilfe bitte die Beiträge bewerten

    Es gibt 10 Arten von Menschen
    - Jene die Binär verstehen und jene die es nicht tun...

  9. #9
    deen_90 deen_90 ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    114
    Also ich habs jetzt mit verschiedenen Subs gemacht für jeden Monat. Wenn ich sie aufrufe, das mach ich jetzt so:

    Code :
    1
    
    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
     

  10. #10
    Tody83 Tody83 ist offline Mitglied Silber
    Registriert seit
    Jan 2008
    Ort
    Kufstein
    Beiträge
    85
    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...
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    
    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 :
    1
    2
    3
    4
    5
    
    ret = LoadFile("2008", "01")
     
    oder
     
    LoadFile "2008", "01"

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

    Lg Tody
    Geändert von Tody83 (28.01.08 um 20:25 Uhr) Grund: Tippfehler
     
    - Bitte erledigte Themen als erledigt Makieren
    - Bei Hilfe bitte die Beiträge bewerten

    Es gibt 10 Arten von Menschen
    - Jene die Binär verstehen und jene die es nicht tun...

  11. #11
    Alexander87 Tutorials.de Gastzugang
    Hi,

    nochmal eine Frage bezüglich einer Funktion.

    Ich habe eine Funktion, der ich einen String übergebe und die mir einen Integerwert ausspuckt.

    Code :
    1
    2
    3
    4
    5
    
    Public Function pixel(ByVal text As String) As Integer
        Dim size As Integer, i As Integer, Breite As Integer
        .....
        pixel = Breite
    End Function

    Aufgerufen wird diese in:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    Sub Schaltfläche3_BeiKlick()
        Dim x As String
        ....
        x = Cells(r, 4).Value
        var = pixel(x)
        .....
    End Sub

    Jedoch bekomme ich beim Kompilieren immer den Fehler: "Erwartet: Datenfeld" beim Aufruf: var = pixel (x)

    Weiß jemand woran das liegt?
     

  12. #12
    Tody83 Tody83 ist offline Mitglied Silber
    Registriert seit
    Jan 2008
    Ort
    Kufstein
    Beiträge
    85
    Hi...

    Ich denke das du nen Konflikt verursachst aufgrund deiner Art zu Coden.
    Schau das du sauber programmierst...

    Mach aus "text as String" -> sText as String 'Das s steht für String
    aus size -> iSize usw...

    So behälst du nen überblick und weist auch welche Werte da drinnen sein können.
    Das auch nach Monaten

    Nun zu deinem Problem:
    Pixel ist eine vorhandene Funktion!
    Daher auch der Fehler.
    Wie gesagt immer schauen das du keine Konflikte rein bekommst

    Versuchs mal so:
    hw -> Steht für HelloWorld! Ich verwende immer solche kürzel um Konflikte zu vermeiden.
    Code :
    1
    2
    3
    4
    5
    
    Public Function hwPixel(ByVal sText As String) As Integer
        Dim iSize As Integer, i As Integer, iBreite As Integer
        .....
        hwPixel = iBreite
    End Function

    Dementsprechend dann der Aufruf:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    Sub Schaltfläche3_BeiKlick()
        Dim X As String
        ....
        X = Cells(r, 4).Value
        var = hwPixel(X)
        .....
    End Sub

    Hoffe das hilft dir weiter...
    lg Tody
     
    - Bitte erledigte Themen als erledigt Makieren
    - Bei Hilfe bitte die Beiträge bewerten

    Es gibt 10 Arten von Menschen
    - Jene die Binär verstehen und jene die es nicht tun...

  13. #13
    Alexander87 Tutorials.de Gastzugang
    Danke!! Lag an "Pixel", aber auch an "size".

    An meinem Programmierstil sollte ich echt mal arbeiten , aber erstmal cool, dass alles funktioniret
     

  14. #14
    Tody83 Tody83 ist offline Mitglied Silber
    Registriert seit
    Jan 2008
    Ort
    Kufstein
    Beiträge
    85
    Hi!

    Freut mich das ich dir helfen konnte.
    Wünsch dir noch viel spass am Coden!

    lg Tody
     
    - Bitte erledigte Themen als erledigt Makieren
    - Bei Hilfe bitte die Beiträge bewerten

    Es gibt 10 Arten von Menschen
    - Jene die Binär verstehen und jene die es nicht tun...

Ähnliche Themen

  1. [VB6] Public Function in Modul benutzen
    Von nicok im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 02.10.08, 18:12
  2. [c#] Verschlüsselung mit private/public Key
    Von Passer im Forum .NET Café
    Antworten: 1
    Letzter Beitrag: 28.02.08, 23:23
  3. public oder private
    Von netrobot im Forum Java
    Antworten: 2
    Letzter Beitrag: 23.12.05, 00:11
  4. Antworten: 7
    Letzter Beitrag: 01.11.05, 13:36
  5. Private / Friend / Public bei ActiveX-DLL's
    Von couldntfindaname im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 29.06.04, 01:34