bigpoint Geschrieben 29. Mai 2002 Geschrieben 29. Mai 2002 Hallo folgendes problem habe ich: Private Sub Cmd_Liczyc_Click() Dim osob As String, metraz As String, vczynsz As String metraz = CStr(Me.Txt_Metraz) osob = CStr(Me.Txt_Osob) vczynsz = czynsz((osob), (metraz)) If vczynsz = "" Then Me.Txt_Czynsz = 0 Else Me.Txt_Czynsz = vczynsz End If End Sub ich habe einen button löschen und da setze ich alle TextFelder auf leren String so : Me.Txt_Osob = "" wenn ich jetz die Funktion Löschen abrufe und dann will ich die Funktin Private Sub Cmd_Liczyc_Click() abrufen ( sie sollte rechnen ) kriege ich ein laufzeit fehler glaube ich 113 Die Funktion czynsz seht so aus: Public Function czynsz(osoby As Double, metraz As Double) Dim vczynsz As Double vczynsz = osoby / metraz ' Rückgabe der Funkton czynsz = vczynsz End Function Ich denke da ich ein problem habe mit Datentyp umwandlung, habe alle aber versucht leider ohne Erfolg ;-(( Bitte Hilllllllllfe Zitieren
Klotzkopp Geschrieben 29. Mai 2002 Geschrieben 29. Mai 2002 Könnte es vielleicht Laufzeitfehler 11 sein, Division durch Null? Zitieren
bigpoint Geschrieben 29. Mai 2002 Autor Geschrieben 29. Mai 2002 Original geschrieben von Klotzkopp Könnte es vielleicht Laufzeitfehler 11 sein, Division durch Null? ne auserdem mache ich keine Division durch Null sondern leren String " " und ich vermute ganz stark die Datentyp umwandlung als problem wie schreib mann eigentlich Exception im vb ? Zitieren
Klotzkopp Geschrieben 29. Mai 2002 Geschrieben 29. Mai 2002 Original geschrieben von 007ski ne auserdem mache ich keine Division durch Null sondern leren String " " In der Funktion czynsz dividierst Du durch metraz, und metraz ist laut Funktionsdeklaration ein Double. Wenn metraz an dieser Stelle Null ist (was bei der Initialisierung durch einen leeren String sehr wahrscheinlich ist), bekommst Du einen Laufzeitfehler. Zitieren
bigpoint Geschrieben 29. Mai 2002 Autor Geschrieben 29. Mai 2002 ich hoffe dass, Du recht hast aber soviel ich weis zB bei c++ leres string ist alles mögliche ( einfach ein Wert aus der ASCI Tabelle )also mühl oder Zitieren
Klotzkopp Geschrieben 29. Mai 2002 Geschrieben 29. Mai 2002 Du übergibst czynsz zwar einen String, aber in der Parameterliste steht ein Double, also wandelt VB den String in einen Double um. Und ich gehe mal davon aus, dass bei einem leeren String der Wert 0.0 rauskommt, alles andere würde mich ziemlich wundern. Zitieren
bigpoint Geschrieben 31. Mai 2002 Autor Geschrieben 31. Mai 2002 leider funktioniert nicht das was Du mir gesagt hast Kann mir doch jemand helfen :confused: Zitieren
Klotzkopp Geschrieben 31. Mai 2002 Geschrieben 31. Mai 2002 Original geschrieben von 007ski leider funktioniert nicht das was Du mir gesagt hast Kann mir doch jemand helfen :confused: Ich habe nichts gesagt, was "funktionieren" könnte, ich habe nur gesagt, wo ich den Fehler vermute. Ändere doch mal csyncsz folgendermaßen: Public Function czynsz(osoby As Double, metraz As Double) Dim vczynsz As Double If metraz = 0 then ' Laufzeitfehler vermeiden czynsz = 0 Else vczynsz = osoby / metraz ' Rückgabe der Funkton czynsz = vczynsz End If End Function Zitieren
bigpoint Geschrieben 4. Juni 2002 Autor Geschrieben 4. Juni 2002 nein es geht nicht um gesagt nicht gesagt, ich bin wirklich froh dass du mir helfen willst aber diesen progi geht einfach nicht Übriegens es ist Laufzeitfehler 13, und erlich gesagt ich sehe kein unterschit ob ich, dass in der Funktion czynsz befrage oder in der Funktion Liczyc_Click() Zitieren
Klotzkopp Geschrieben 4. Juni 2002 Geschrieben 4. Juni 2002 Original geschrieben von 007ski Übriegens es ist Laufzeitfehler 13Ah, jetzt sehen wir klarer. Laufzeitfehler 13 ist Type Mismatch, d.h. die Laufzeitumgebung kann eine erforderliche Typumwandlung nicht durchführen. Als erstes fällt mir da auf: vczynsz = czynsz((osob), (metraz)) If vczynsz = "" Then [/CODE]czynsz liefert einen Double, kann sein, dass Du den nicht mit einem String vergleichen kannst. Vielleicht könnte jemand, der VB zur Verfügung hat, das mal überprüfen. Zitieren
bigpoint Geschrieben 5. Juni 2002 Autor Geschrieben 5. Juni 2002 habe auch gedacht aber ne ich habe die ganze Methode czynsz als String gemacht und trozdem geht nicht :confused: Zitieren
Klotzkopp Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 Kannst Du genau bestimmen, in welcher Zeile der Fehler auftritt? Zitieren
Boro Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 Original geschrieben von 007ski Hallo folgendes problem habe ich: Private Sub Cmd_Liczyc_Click() Dim osob As String, metraz As String, vczynsz As String metraz = CStr(Me.Txt_Metraz) osob = CStr(Me.Txt_Osob) vczynsz = czynsz((osob), (metraz)) If vczynsz = "" Then Me.Txt_Czynsz = 0 Else Me.Txt_Czynsz = vczynsz End If End Sub Hallo, ich habe deinen Quellcode so verstanden dass du mit dem Wert von zwei Textfelder innerhalb einer Funktion rechnen möchtest. Das bringt mich auf zwei Fragen : a) Du liest den Inhalt der Textfelder in Stringvariablen, du wandelst sie mit cstr sogar noch um. Aber warum wenn du doch nur rechnen willst ? Deklariere die Variablen doch auch als Double. Texteingaben in dass Textfeld fängst du dann einfach mit if isnumeric(me.txt_XZY) = true then .....usw ab. Du hast den Rückgabewert der Function nicht mit angegeben, hat dass einen speziellen Grund ? Ich meine, willst du innerhalb der Funktion eventuell mit Objekten arbeiten oder so ? Ansonsten würde ich dir raten die Funktion as double zu deklarieren, ich glaube zwar nicht dran, aber es könnte sein dass sich Variant nicht einfach so in eine Stringvariable zwingen läßt. Ansonsten schliesse ich mich Klotzkopp an, einen leeren String zu übergeben führt mit Sicherheit zur Divison durch Null. Und bei einem Vergleich müssen die Datentypen der Ausdrücke gleich sein. Wenn überhaupt würde ich dieser Stelle mit CStr bzw. Cdbl konventieren. Ich hoffe dass ich die Logik hinter dem Code richtig verstanden hab, wenn ja, dann versuch bitte erstmal die Variablen auf double zu setzen. So long Feivel Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.