PDA

Vollständige Version anzeigen : Modul verknüpfen?


Manzi
22.03.2006, 16:34
Hallo!

Habe hier folgendes Modul und will das Ergebnis jetzt in einem Textfeld anzeigen wie mache ich das?

E ...ist ein Genauigkeitswert der in eine Inputbox eingegeben wird


Public Function calcpi(E As Integer) As Long
Dim pi As Double
'3.1415926535897932384626433832795028841972
pi = 3.14159265358979
Dim i As Long
Dim x As Double
i = 0
Do Until Abs(pi - y) < 10 ^ -(E + 1)
i = i + 1
x = x + 1 / i ^ 2
y = Sqr(x * 6)
Loop
calcpi = i
End Function



Danke

JörgG
22.03.2006, 16:58
Hallo,

zB:
Var_von_Inputbox = InputBox(...)
Me!Textfeld = calcpi(Var_von_Inputbox)
Schau Dir Rückgabewerte von Inputboxen in der OH an, vor allem wenn Abbrechen geklickt wird.

Übrigens, Deine Funktion steht in einem Modul :D

MANZI
22.03.2006, 17:19
Hallo!

Klassischer Code!



Dim E As String

E = InputBox("Bitte geben sie die Genauigkeit ein")
If E = "" Then
MsgBox "Bitte geben sie ein x > 10^-6 ein!", vbCritical, "Fehler"
ElseIf Not IsNumeric(E) Then
MsgBox "Bitte geben sie ein x > 10^-6 ein!", vbCritical, "Fehler"
ElseIf E <= 10 ^ -6 Then
MsgBox "Bitte geben sie ein x > 10^-6 ein!", vbCritical, "Fehler"
Cancel = True
Exit Sub
End If



Me!Ergebnis = calcpi(E)





Modul


Public Function calcpi(E As Integer) As Long
Dim pi As Double
'3.1415926535897932384626433832795028841972
pi = 3.14159265358979
Dim i As Long
Dim x As Double
i = 0
Do Until Abs(pi - y) < 10 ^ -(E + 1)
i = i + 1
x = x + 1 / i ^ 2
y = Sqr(x * 6)
Loop
calcpi = i
End Function




Leider kommt hier immer folgende Fehlermeldung?

!!!!Argumenttyp ByRef unverträglich!!!


Was ist hier falsch?

Brauche das Ergebnis der Reihe?


Danke!!!

JörgG
22.03.2006, 17:29
Deine Funktion erwartet einen Wert vom Typ Integer wärend Dein E ein String im Double-Format :eek: ist, also ... Datentypen beachten:

Public Function calcpi(E As Double) As Long.

JörgG
22.03.2006, 17:50
da fällt mir noch etwas auf, gibst Du in die Inputbox 10^-6 ein ? Dann sollte der Funktionsaufruf evtl so aussehen:
Me!Textfeld = calcpi(Eval(E))

Manzi
22.03.2006, 17:53
Hallo!

Also für Double oder Integer ist klar nur welches ist richtig da die Genauigkeit bis 10^-6 0,000001

Was ist der Unterschied Double und Integer?
Sollte man das hier nach oben auch sperren, da sich sonst Access aufhängt?


Danke danke danke

JörgG
22.03.2006, 18:05
na, dann setz mal den Cursor in das Wort Double/Integer und drücke die F1-Taste, während das eine Kommazahlen sind ist das Andere eine kleine Ganzzahl...also große Unterschiede im Definitionsbereich

manzi
22.03.2006, 18:09
Und was ist jetzt richtig bei double ist der 0,000001 nicht abgedeckt, also Integer oder?


Danke

Locutus
22.03.2006, 18:14
Hallo,

Da Du ja PI über eine Reihe entwickeln möchtest (so hatte ich Dich in einem anderen Trhead verstanden), probiere doch mal folgende FunktionPublic Function calcpi(E As Long) As Double

Dim i As Long
Dim x As Double

For i = 1 To E
x = x + 1 / i ^ 2
Next

calcpi = Sqr(x * 6)

End FunctionKannst ja mal mit einem Input von E=1000000 testen.
Gruß
Jörn

Manzi
22.03.2006, 18:19
Danke euch allen hoffe bin gestern nicht falsch rüber gekommen, nur als Neuling in VBA ist das alles nciht so einfach!


Danke Danke Danke

JörgG
22.03.2006, 18:25
@#8

Integer = Bereich von -32.768 bis 32.767
Long = Bereich von -2.147.483.648 bis 2.147.483.647
Double = Bereich von -1,79769313486231E308 bis -4,94065645841247E-324 für negative Werte und von 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte

alles klar...die Macht von F1 sei mit Dir :p