Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1948to1952
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

Laufzeitfehler 9

Laufzeitfehler 9
16.10.2023 23:59:30
JBL
Hallo,
mein Problem besteht darin, dass der folgende Code
einen Laufzeitfehler mit der Nummer 9 erzeugt.
Der Rechner ist ganz neu und ich habe Office 365 aboniert.
Das merkwürdige an der Sache ist aber, dass der Code auf
dem alten Rechner seit Jahren funktoniert.
Bei der Überprüfung des Inhalts nach der Zuweisung von Year(Date) wird
das Jahr 2023 angezeigt, die Variable wurde aber in Variant/Integer umdeklariert.
Da der Befehl With Worksheets(strjahr) aber einen String erwartet, wird das angesprochene
Tabellenblatt nicht gefunden und es kommt zum Fehler 9

Dim strjahr As String
.
.
.
strjahr = Year(Date)
With Worksheets(strjahr)

Ändere ich die Deklaration wie folgt, funktioniert alles wie gehabt.

Dim strjahr As String * 4 'String mit vier Zeichen

Es kann aber nicht sein das ich jetzt alle Makros entsprechend anpassen muß
nur weil MS mal wieder was neues eingefallen ist!
Hat jemand noch eine Idee wie man das umgehen kann?

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 9
17.10.2023 00:54:36
daniel
Hi

Die Funktion Worksheet(x) hat zwei Optionen.
Du kannst das Worksheet entweder über seinen Namen (also der Text, der auf dem Reiter steht) ansprechen, oder über die Indexnummer (Position des Sheets in der Auflistung, Sheet(1) ist das erste Blatt von Links)

Ob jetzt das x jetzt als Name oder als Position interpretiert wird, hängt von seinem Datentyp ab.
Ist es ein String, so wird der Wert in den Sheetnamen gesucht, ist x eine Zahl, wird es als Positionsnummern gedeutet.
Sheet("2023") ist das Sheet mit dem Namen "2023", Sheet(2023) ist das zweitausendreiundzanzigste Sheet und so viele hast du nicht.

Wenn du die Variable x als Variant deklariert, dann hängt der Typ von der letzten Zuweisung ab. Year(Date) ist eine Zahl, also wird auch den x eine Zahl.

Also entweder x vorab als String deklarieren, oder bei Bedarf umwandeln:
Sheets(CStr(x))

Gruß Daniel
Anzeige
AW: Laufzeitfehler 9
17.10.2023 11:28:14
GerdL
HoladieWaldfee JBL,

im VBA-Editor
Ersetzen
= Year(Date)
durch
= CStr(Year(Date))

So wird das Zweitausendreiundzwanzigste in "2023" konvertiert.

Gruß Gerd
AW: Laufzeitfehler 9
17.10.2023 10:38:01
JBL
Hallo daniel,
zunächst einmal vielen Dank für die Antwort.
Wie ich in meiner ersten Nachricht bereits erwähnte, wird die
Variable, die dann die Jahreszahl (Year(Dtae)) aufnehmen soll,
als String deklariert. Nach der Zuweisung der Jahreszahl wird die
Variable aber in der Überwachung nicht als String sondern als Variant/Integer
dargestellt. Natürlich kann man jetzt entsprechende Konvertierungen vornehmen.
Was mich an der Sache stört ist die Tatsache das der Befehl strjahr = Year(Date)
und der anschließende Aufruf With Worksheets(strjahr) jahrelang ohne Zwischenschritte
funktioniert hat.
Was hat sich bei VBA innerhalb eines Tages verändert?
Anzeige
AW: Laufzeitfehler 9
17.10.2023 10:54:37
Oberschlumpf
Hi,

und du könntest niemals der Grund sein, wieso deine Idee nicht funktioniert?!

Na klar, immer erst mal die "Schuld" bei "Anderen" suchen! :-))

denn...

a) hab dieses kleine Makro getestet


Sub test()
Dim strjahr As String
strjahr = Year(Date)
End Sub


...auch nach Zuweisung eines INTEGER-Wertes (Year(...) liefert als Ergebnis immer Integer!) bleibt strJahr weiterhin eine STRING-Variable - siehe hier:
Userbild

b) Zitatauszug:
"...Ändere ich die Deklaration wie folgt, funktioniert alles wie gehabt.

Dim strjahr As String * 4 'String mit vier Zeichen

Es kann aber nicht sein das ich jetzt alle Makros entsprechend anpassen muß
nur weil MS mal wieder was neues eingefallen ist! ..."


Das mit String * 4 hab ich nicht getestet, weil...siehe obiges Bild...is ja eigtl nich erforderlich.

ähh..nee, es muss auch nich sein, dass duuuuu alle Makros anpassen musst^^
Aber du könntest vllt mit F8 jede einzelne Codezeile durchlaufen lassen, damit du vielleicht im Code den Befehl findest, mit dem du den Fehler, oder das von dir beschriebene Problem, verursacht hast.

...das nur so als Anregung...

Ciao
Thorsten
Anzeige
AW: Laufzeitfehler 9
17.10.2023 12:18:53
daniel
Hi
meinen Tests nach hat sich VBA nicht verändert.
Excel 365 funktioniert in diesem Punkt genauso wie Excel 2010.
hast du vielleicht irgendwas verändert?
manchmal können auch Kleinigkeiten ausschlaggebend sein.
Wenn du beispielsweise:
Dim x as string erweiterst zu Dim x, y as string
dann wird im zweiten Fall x keine String, sondern eine Variantvariable.
damit beide Variablen vom Typ String sind müsste man schreiben:
dim x as string, y as string

wenns das nicht ist, lade mal die Datei mit deinem Code hoch, damit wir besser sehen können, was bei dir vorliegt.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 9
17.10.2023 16:01:25
JBL
Hallo an Alle

vielen Dank für die vielen Tips.
Der entscheidende Hinweis kam von daniel.
Tatsächlich ist bei der Deklaration von mehreren Variablen
in einer Zeile die Reihenfolge für den Typ entscheidend.
Nur die zuletzt angegebene Variable erhält den angegebenen Typ,
in meinem Fall den Typ "String", alle Anderen Variant/Integer.
Das ist bei der Zuweisung aller Datetypen der Fall!
Vielen Dank für die Hilfe. Problem gelöst!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige