Laufzeitfehler 9 bei Angabe von workbook-Index

Wir sind im Rechenzentrum unserer Firma von von Windows XP-Umgebung auf Server 2008 Umgebung (Windows 7) und zeitgleich von Office 2000 auf Office 2010 umgestiegen. Ich programmiere mir meine Analysen in VBA Excel. Wenn ich nun von einer (offenen) Exceldatei per VBA eine weitere (z.B. mit Quelldaten) öffnen lasse, und diese im folgenden dann, wie schon immer, mit workbooks(Index).worksheet(…) anspreche, kommt „Laufzeitfehler 9 - Index auserhalb gültigem Bereich“. Generell spreche ich in VBA alle Excel-Dateien mit denen ich arbeite immer mit workbooks(Index)… an. Geht ja auch nicht anders. Ich muss der Kiste ja sagen, in welchem „Workbook“ sie was machen soll, wenn mehr als eine Exceldatei offen ist. Erst durch den Workbook-Index wird das ganze ja eindeutig definiert. Seit dem Umstieg hat er ein Indexproblem bez. dem Workbook-Index.

Ich weiß mir keinen Rat mehr:frowning: Kennt jemand das Problem? Wenn ja, gibt es Abhilfe?

Morgen,

Du kannst dir auch ein workbook Objekt erstellen.

Dim wbMeinWorkbook as workbook

Set wbMeinWorkbook = Workbooks(1)

Oder schon wenn du es öffnest zuweisen.

Das ist dann objektorientierte vba Programmierung. Lies dich mal da ein. Ist sehr komfortabel.

Lg
OVM

zwei Äderungen mit einem Schlag, zunächst würde ich mal versuchen, ob es mit excel 2000 in der neuen Umgebung funktioniert (es laufen notfalls beide Versionen auf einem Rechner, aber vorsicht), dann, kann man das Problem eingrenzen.
Als nächstes würde ich unter der VBA Hilfe schauen ob es Hinweise auf eine Änderung der Syntax gibt

Gruß

Ich habe keinen Zugriff auf Office 2010, insofern kann ich nicht beantworten, was sich von Office 2000 nach Office 2010 geändert hat.

Wenn du eine begrenzte (und immer gleiche) Anzahl von Workbooks öffnen willst, sollte sich das Problem m.E. aber umgehen lassen, indem du für jedes Workbook ein eigenes Objekt definierst, also etwa so bei einer per VBA zu öffnenden weiteren Datei:

Dim ErsteMappe, ZweiteMappe as Workbook

Set ErsteMappe = ThisWorkbook
Set ZweiteMappe = Application.Workbooks.Open("C:\Temp\zweitemappe.xls",,True)

ErsteMappe.Worksheets(1).Cells(1,1).Value = ZweiteMappe.Worksheets(1).Cells(1,1).Value ' als Beispiel

[...]

ErsteMappe.Activate
ZweiteMappe.Close

Ich hoffe, das hilft weiter?

Gruß, BellHouse

Hallo,
ich weiß nicht, ob ich da weiterhelfen kann, ich steige auch gerade von XP/Excel 2003 auf W7/Excel 2010 um. Ich habe solche Anwendungen (Zugriff auf anderes Workbook) programmiert, aber immer statt dem Index den Namen verwendet, vielleicht hilft das?
Viel Erfolg
Rainer

Vielen Dank für die schnelle Antwort:smile:

Habe die Lösung gefunden. Wenn ich mit workbooks(„Mappe1“) eine Datei namens Mappe1 ansprechen will, so muss jetzt, wenn der Name des Workbooks als Index angegeben wird zusätzlich der Dateityp mit angegeben werden. Z. B. workbooks(„Mappe1.xlsx“).blablabla

Ich vermute das ist jetzt so, da es seit Office 2007 verschiedene Exceldateitypen gibt. Nämlich mit Makros (.xlsm) und ohne Makros(.xlsx)

Jetzt läuft wieder alles bestens:smile: