Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Wie deklariere ich eine Funktion richtig

Begonnen von Optiplex, November 15, 2010, 09:11:44

⏪ vorheriges - nächstes ⏩

Optiplex

Hallo zusammen,
ich habe eine Frage zur Deklaration von Functionen. wenn ich folgende Deklaration schreibe

Public Function xyUngelöst ( zahl1,zahl2,zahl3 As Long )

sind dann alle Variablen zahl1-3 als Long deklariert oder nur zahl3 und die Anderen sind Varianten und wie ist das mit byrev und byval was sollte man hier beachten.

Danke und gruß Dieter


MzKlMu

#1
Hallo,
Nur Zahl3 ist Long, die anderen sind Variant.
So ist es richtig.
Public Function xyUngelöst ( zahl1 As Long, zahl2 As Long, zahl3 As Long )  As Long

Eine Funktion gibt auch in der Regel einen Wert zurück, der auch deklariert werden sollte.

Dim X, Y, Z As String wäre in obigem Sinn auch falsch.

Zu byval musst Du mal selbst recherchieren, meine Erkläreungen sind da nicht so sattelfest.
Die Access Hilfe ist zunächst mal eine gute Anlaufstelle.

Nachtrag: In der Hilfe ist auch nichts gescheites zu finden.
Gruß Klaus

Optiplex

hallo MzKlMu,
richtig in der Hilfe habe ich auch nicht genaues gefunden.Also muss man jede Variable einzeln deklarieren außer man arbeitet grundsätzlich mit Varianten.
ByVal / ByRev blicke ich noch nicht so richtig durch. Die eine soll irgendwie nur auf die Adresse in Speicher verweisen wärend die Andere eine Kopie der Variable erstellt und mit dieser weiterarbeitet, aber wann nimmt man was?

Gruß Dieter

DF6GL

HAllo,

ByVal  (by Value):   Übergabe nur des Wertes (als "Kopie")
ByRef (by Reference): Übergabe des Pointers auf ein Variable (oder Objekt)


ByVal schließt aus, dass die Funktion/Sub den Originalwert ändern kann.
ByVal ist bei Object-Übergabe nicht möglich.

(Hast Du ja schon ähnlich gesagt)


"wann nimmt man was" 


das mußt Du wissen, was die Prozedur machen soll, Du schreibst die Funktion/Sub...

database

Hallo,

Zitatwann nimmt man was

Wenn der Originalwert nicht verändert werden darf keinesfalls ByRef

zur näheren Erklärung siehe u.a. hier   http://www.vbarchiv.net/faq/faq_strings_byval.html

Grüße

Optiplex

Super erklärt von euch beiden, jetzt müst ihr mir nur noch verraten was Access als Standardwert setzt wenn ich nichts angebe und muss ich das vor jeder Variablen machen oder nur Einmal am anfang hinter der Klammer.

Gruß Dieter

Josef

Hallo!

Kurzer Hinweis:
ZitatByVal ist bei Object-Übergabe nicht möglich.
Auch für eine Referenz-Übergabe kann ByVal verwendet werden. Das kann ich empfehlen, damit man nicht irrtümlich die Referenz überschreibt.

Beispiel:
Private Sub machetwas(ByVal RecordsetReferenz As DAO.Recordset)

   With RecordsetReferenz
      Debug.Print .Fields(0).Name, .Fields(0).value
   End With
   Set RecordsetReferenz = Nothing 'ok, ist ziemlich sinnlos ;-)

End Sub

Private Sub test()

   Dim rst As DAO.Recordset
   
   Set rst = CurrentDb.OpenRecordset("select id from Tabelle")
   
   machetwas rst
   rst.MoveNext
   machetwas rst
   
   rst.Close

End Sub

Zum Testen dann auch einmal Byval durch ByRef ersetzen. => Wird einen Fehler auslösen.

mfg
Josef

DF6GL

Hallo Josef,

und schon wieder hast Du mich einer Illusion beraubt  :'(   :D


Dachte, weil ein Objekt nur per Referenz ansprechbar ist, klappt ein byVal nicht.. Habe das aber auch nie so getestet..    :-[

Danke für den Hinweis  :)

Optiplex

Huch jetzt hatte ich den Link von database glatt übersehen, vergeßt meinen letzten Beitrag, es ist alles genaustens erklärt, danke nochmals an alle.
Gruß Dieter