Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1236to1240
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Typen unverträglich

Typen unverträglich
Franz
Hallo Fachleute,
ein Beispiel für mein Problem:
MsgBox Month(Cells(iTag, iMon)) ergibt 1
MsgBox Month(Date) ergibt 11
ABER: die Abfrage
If Month(Cells(iTag, iMon)) = Month(Date) Then
ergibt die Fehlermeldung "Typen unverträglich"
Ich bitte Euch um Hilfe, was ich da tun muss.
Danke schonmal und Grüße
Franz

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Nicht nachvollziehbar
07.11.2011 10:50:07
Harald
Hallo Franz,
in Zelle A1 steht die Formel: =heute()
Der folgende Code funktioniert:
Option Explicit
Sub test()
MsgBox Month(Cells(1, 1))
MsgBox Month(Date)
If Month(Cells(1, 1)) = Month(Date) Then
MsgBox "hurra"
End If
End Sub
liegt die Unverträglichkeit vielleicht darin, dass iTag oder iMon an der Stelle der if-Anweisung in Deinem Code nicht als Integer oder Long definiert sind?
Gruß
Harald
AW: Nicht nachvollziehbar
07.11.2011 11:05:27
Franz
Hallo Harald,
richtig, ich versteh es eben auch nicht. Und die Variablen sind beide als INTEGER definiert?
Hab jetzt noch bissl war probiert:
Diese Abfrage kommt am Ende eines längeren Codes, in dem die beiden Variablen bereits mehrfach benutzt werden. Setze ich diesen Schnipsel an den Anfang des Codes, dann klappts plötzlich. Kann es sein, dass da von vorherigem Gebrauch irgendwas hängenbleibt? Und kann man die Variablen vor erneutem Gebrauch so etwas wie "zurücksetzen"?
Grüße
Franz
Anzeige
AW: Nicht nachvollziehbar
07.11.2011 11:18:19
Harald
Hallo Franz,
"vom Gebrauch etwas hängenbleiben" kann eigentlich nur in der Form, dass der Wert einer Variablen geändert wird. Aber den Typ zur Laufzeit ändern - ich wüsste nicht, wie das in VBA funktioniert.
Hast Du "option explicit" am Anfang des Codes, um auszuschließen, dass der VBA Interpreter bei einem evtl. Tippfehler einfach eine Variable eines neuen Typs erstellt? (das sieht an in meiner Antwort leider nicht, weil es oberhalb der gelben Box mit dem Code angezeigt wird. Das macht das Forums Tool eben so.
Wenn ich z.B. folgendes mache:
Sub test()
imon = 1
itag = 1
MsgBox Month(Cells(imon, itag))
MsgBox Month(Date)
imon = "test"
If Month(Cells(imon, itag)) = Month(Date) Then
MsgBox "hurra"
End If
End Sub
dann sind imon und itag anfangs integer und beide MSGboxen funktionieren. Durch die Zuweisung imon="test" wird imon aber implizit zu einem String. dann schlägt auch der Vergleich fehl, weill Cells() eben keinen String erwartet.
Gruß
Harald
Anzeige
AW: Nicht nachvollziehbar
07.11.2011 11:38:29
Franz
Hallo Harald,
okay, das versteh ich, da müsste ich mal meinen Code durchfieseln, ob ich da irgendwo einen Wechsel drin hab. Kann man denn irgendwo in einem Code irgendwie die Definition einer Variablen auslesen, gibt's da ne Möglichkeit?
"option explicit" hab ich drin
Grüße
Franz
AW: Nicht nachvollziehbar
07.11.2011 12:19:48
Harald
Hallo Franz,
hast Du imon und iTag auch explizit als Integer deklariert?
Gerne wird folgendes gemacht:
Dim imon, itag As Integer
und der Programmierer meint, beide Variablen als Integer deklariert zu haben. Das ist aber nicht so. VBA geht hier eigene Wege. Bei einer solchen Deklaration ist imon als Variant deklariert, nur iTag ist Integer. Seltsam aber wahr, wie folgendes Codeschnipsel zeigt::
imon = "hallo"
itag = 1
Das funktioniert nämlich anstandslos.
Wie man den Typ einer variablen an einer beliebigen Stelle im Code anzeigen kann, weiß ich nicht. Du kannst aber überall im Code mit rechter Maustaste auf die Variable klicken und imkontextmenü "Definition" auswählen. Dann springt der Cursor zu der DIM-Anweisung.
Gruß Harald
Anzeige
AW: Nicht nachvollziehbar
07.11.2011 12:34:05
Franz
Hallo Harald,
"Dim iHlbJhr As Byte, iMon As Integer, iTag As Integer" - so hab ich's geschrieben, daran kann's also eigentlich auch nicht liegen.
Und auch der Klick auf Definition im Kontextmenü führt zur richtigen Dim-Anweisung.
Na, ich werd mich mal dran machen, den Code durchzugehen und schaun, ob ich was rausfind.
Ich danke Dir auf jeden Fall, hab ein paar neue Ideen gekriegt.
Grüße
Franz
Noch 'ne Idee
07.11.2011 12:43:09
Harald
Hallo Franz,
Du kannst im VBA Editor auf iMon klicken, dann im Menü unter Debuggen - Überwachung hinzufügen bei Art der Überwachung "Unterbrechen, wenn Wert geändert wurde" anklicken. Das Gleiche für iTag. Dann kannst Du das Programm laufen lassen und es hälz jedes Mal an, wenn einer der werte geändert wird. Dann findest DU schnell die Stelle, wo ggfls. ein unpassender Wert zugewiesen wird. Wobei VBA eigentlich dann an dieser Stelle meckern sollte, nicht erst später.
Gruß Harald
Anzeige
AW: Typen unverträglich
07.11.2011 12:52:38
Heiko
Moin Franz,
ich denke ja da deine iTag und iMon "zwischendurch" verändert werden.
Was zeigt den eine MsgBox wenn du die mal vor dem Vergleich einbaust, steht da wirklich ein Datum oder vielleicht ein Text.
Also in etwa so:
MsgBox Cells(iTag, iMon) ' Was kriegts du hier angeziegt ?!
MsgBox TypeName(Cells(iTag, iMon).Value) ' Das kann man sich auch noch mal anzeigen lassen.
If Month(Cells(iTag, iMon)) = Month(Date) Then
Gruß Heiko
@ Harald und Heiko
07.11.2011 12:57:03
Franz
Hallo Harald und Heiko,
danke für Eure Ideen, werde beides ausprobieren, allerdings erst später. Ich muss jetzt leider raus und komm erst später wieder dazu. Ich geb aber Rückmeldung, wenn ich weiter bin.
Danke erstmal und beste Grüße
Franz
Anzeige
AW: Typen unverträglich - Teilerfolg
07.11.2011 14:07:32
Franz
Hallo Heiko,
mit Deinen beiden MsgBoxen hat ich den fehler rausgefunden:
Die erste MsgBox gibt tatsächlich ein Datum aus, die zweite MsbBox zeigt "Date"
BIS......... zum 29. Februar, da - natürlich - zeigt die erste MsgBox nichts mehr an, die zweite sagt jetzt "String" - daran liegt's also. Die letzten 3 (2) Tage im Februar und die nicht existenten 31.-ten einiger Monate muss ich jetzt noch ausschließen, mal schauen wie....
Danke und Grüße
Franz
AW: Typen unverträglich - Teilerfolg
07.11.2011 14:46:28
Harald
Hallo Franz,
tja, wenn in den Zellen auch nicht-Datumswerte stehen...
Du kannst das vorab testen:
If isdate(Cells(iTag, iMon)) then
If Month(Cells(iTag, iMon)) = Month(Date) Then
'tue was
End if
End if
Gruß
Harald
Anzeige
AW: Typen unverträglich - ERFOLG
07.11.2011 15:09:21
Franz
Hallo Harald,
wunderbar, das ist gut. Hab's mit
If........ ""
versucht, das hat nicht geklappt. Aber "If IsDate" klappt. Vielen Dank! Hast mir sehr geholfen.
Grüße
Franz

8 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige