Hallo Niclaus,
Hier ist alles deklariert, was ich deklarieren kann.
sicher?
Du könntest das auch so
Function gerundet(ByVal Stellen As Long) As Double
oder so
Function gerundet(ByRef Stellen As Long) As Double
schreiben.
ByVal/ByRef kann wichtig werden. Ein API-Guru, Dan
Appleman schreibt in seinem einzig auf deutsch erschienenen
Buch ziemlich viele Seiten nur zu ByRef/ByVal.
Denn scheinbar, da mal das falsche benutzt stürzt Excel
komplett ab.
Und viel viel schlimmer, es stürzt nicht ab aber es
können falsche Ergebnisse rauskommen und wenn man
bei der Fehlersuche stundenlang nicht draufkommt daß es an
dem liegt
…
Und das Buch wendet sich wie alles mit API an erfahrene
Vbaler.
Das jetzt mal geschrieben als reine Information, für so Kleincodes
brauchste das nicht zu beachten.
Rnd ist
eine VBA-interne „Funktion“, die ich nicht deklarieren kann.
Richtig , könntest du nur wenn aus Redmond den Originalcode
von Excel klaust und das im Code vorm Kompilieren abänderst *gg*
Ich habe es zwar versucht mit Dim Rnd As Double (die einzige
Deklaration die hier in Frage kommt?).
Genau auf deine Frage antworten, Rnd kannste deklarieren wie du
willst, koommen also viele Deklarationen in Frage.
Aber dann erhalte ich
immer das Ergebnis 0, wenn ich die Function in einer
Excel-Zelle einsetze.
Logisch, in deiner Funktion hast du nicht die interne Funktion
Rnd eingesetzt sondern durch das Dim Rnd deine Variable Rnd.
Und Variablen die nur deklariert sind haben halt den Wert 0
oder leer oder nix…
Nachstehend Code, teste mal die Subs.
Dann mach die Hochkommas weg von der Funktion und teste
die erste Sub erneut…
Um nicht in unnötige Problematiken zu kommen benenne grundsätzlich
deine Variablen, Subs, Funcs nie wie interne „Namen“.
Außer mit voller Absicht.
Gruß
Reinhard
Sub RundenMitRndFunktion()
MsgBox Round(Rnd(7), 6)
End Sub
Sub RundenMitRndAlsEigenVariable()
Dim Rnd(7)
MsgBox Round(Rnd(7), 6)
End Sub
'Function Rnd(zahl)
'Rnd = 5
'End Function