Frage von agent888, 92

Was ist bei diesem Code falsch?

Hi, ich habe einen kurzen Code-Ausschnitt aus Excel-VBA, bei dem immer der Laufzeitfehler 13 (Typen unverträglich zurückgegeben wird! Ich finde allerdings den Fehler nicht! Code:

If Tabelle4.Cells(intZeilenzahl, 6).Value <> "" Then
   txtTäglichStundenLesen = Tabelle4.Cells(intZeilenzahl, 6).Value \ 60
   txtTäglichMinutenLesen.Value = Tabelle4.Cells(intZeilenzahl, 6).Value Mod 60
Else
   txtTäglichMinutenLesen.Value = ""
   txtTäglichStundenLesen.Value = ""
End If

Wo liegt hier der Fehler? Danke für die Antworten schon im Voraus!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von ThomasAral, 52

.Value ist immer vom Typ des Eintrags der drin steht ---   "" ist jedoch immer vom Typ String  (das wäre nur mit Variant kompatibel).  Da könnte der Fehler sein.  Also Beispiel:  if  82 <> ""    (geht nicht, gibt "type missmatch" obwohl es natürlich vom menschlichen standpunkt betrachtet wahr ist)

Der Fehler könnte aber auch bei  \ 60   oder  mod 60 liegen.  Denn das geht natürlich nur wenn Value vom Typ Zahl ist,   denn   "a" \ 60  z.B.  würde auch das entsprechende "Typen unverträglich" erzeugen.

Bei der Eingangsabfrage ein Str davor setzen, also:

If Str(Tabelle4.Cells(intZeilenzahl, 6)) <> ""

Bei den weiteren dann

txtTäglichStundenLesen = Val(Tabelle4.Cells(intZeilenzahl, 6)) \ 60

' Val nur wenn kein , vorkommt sondern . als Dezimaltrenner, ansonsten den entsprechenden Typ CDbl oder CInt verwenden.
Kommentar von agent888 ,

Danke für deine Hilfe! Es funktioniert schon.... Ich habe eine variable vom typ variant mit dem Inhalt der zelle angelegt und diese durch 60 geteilt.... Jetzt geht es...

Expertenantwort
von Oubyi, Community-Experte für Excel, 53

WO tritt der Fehler denn auf?
Die Zeilenzahl in Excel sollte man immer als "long" definieren, nicht als "integer", aber ich denke, das ist hier nicht der Fehler.
Steht denn in der abgefragten Zelle eine echte Zahl? Sonst wirft das Mod 60 den Error 13 aus.
Teste das vlt. mal, indem Du die Funktion REST direkt im Sheet auf die abgefragte Zelle beziehst.

Kommentar von agent888 ,

Danke für deine Hilfe! Es funktioniert schon.... Ich habe eine variable vom typ variant mit dem Inhalt der zelle angelegt und diese durch 60 geteilt.... Jetzt geht es...

Kommentar von Oubyi ,

Das ist imho keine saubere Lösung.
Test auf jeden Fall mal genau, ob es zu keinen Fehlern kommt.

Expertenantwort
von Ninombre, Community-Experte für Excel, 36

Was genau ist den txtTäglichStundenlesen? Ich kann den Ablauf noch nicht ganz nachvollziehen, es fällt nur auf, dass in der fehlerhaften Zeile kein .value steht.

Kommentar von agent888 ,

Das ist ein Textfeld auf meiner Userform!

Kommentar von Ninombre ,

Was steht denn in der Zelle, die für die Berechnung herangezogen wird? Du hattest zwar geschrieben (sinngemäß) danke für die Hinweise, aber es klappt nicht. Aber was steht nun in der Zelle drin?
Wird über den Wert von intzeilenzahl ggf. ein falsches Feld angesprochen?

Antwort
von agent888, 33

Danke für die Antworten! Hat allerdings nicht geholfen.. der Fehler kommt immer noch... Die  Zeile in der ich \ 60 rechne, ist die Fehlerhafte Zeile...

Kommentar von Oubyi ,

Kommentiere dann diese Zeile einfach mal aus.
Wenn dann der Fehler in der nächsten Zeile (Mod 60) genau so eintritt, dann steht imho in der Zelle KEINE Zahl.
Füge mal vor der Fehler-Zeile diese ein:

debug.print Tabelle4.Cells(intZeilenzahl, 6).Value \ 60

Was wird im Direktbereich angezeigt?

Hast Du meinen Test durchgeführt?:

Teste das vlt. mal, indem Du die Funktion REST direkt im Sheet auf die abgefragte Zelle beziehst.

P.S.: Wenn Du nicht in einer Antwort, sondern direkt als Kommentar in unseren Antworten reagierst, bekommen wir das wesentlich schnelle/ besser mit. Hierauf bin ich nur durch Zufall gestoßen.

Kommentar von agent888 ,

Danke für deine Hilfe! Es funktioniert schon.... Ich habe eine variable vom typ variant mit dem Inhalt der zelle angelegt und diese durch 60 geteilt.... Jetzt geht es...

Keine passende Antwort gefunden?

Fragen Sie die Community