Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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 ?

Geschrieben
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.
Geschrieben

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.

Geschrieben
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

Geschrieben

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()

Geschrieben
Original geschrieben von 007ski

Übriegens es ist Laufzeitfehler 13

Ah, 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.

Geschrieben
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.

B) 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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...