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

Sheets kopieren - Indexfehler #9

Sheets kopieren - Indexfehler #9
02.05.2018 09:36:53
m.e.neubauer
Hallo Gemeinde,
seit einiger Zeit kämpfe ich mit dem Fehler Nr.9 "Index außerhalb des gültigen Bereiches" (Subscription out of Range).
Ich habe folgende Aufgabe und Vorgehen:
- Sheets aus mehreren (z.Z. fünf) Dateien sollen in eine Reportdatei kopiert werden.
- Dazu ist das VBA-Programm in 'Datei_A'; dieses geht in einer Schleife durch die Quellfiles 'WBQuelle'. Kopiert das benötigte Sheet in das dann auch geöffnete 'WBZiel'
- Die Programmdatei bleibt immer offen; die Quellfiles die das Steuerprogramm aus einer Tabelle liest werden der Reihe nach geöffnet - benötigtes sheet wird gesucht - selektiert - zum Zielfile gewechselt - dort einkopiert - umbenannt - gesichert - Quelle und Ziel wird geschlossen.
Das funktioniert auch für den ersten Durchlauf. Das Quellfile hat nur das eine gewünschte Sheet. Das dann folgende Quellfile weist 4 sheets auf (das erste ist das betreffende).
Dabei tritt dann der Indexfehler auf.
Zurvor ermittle ich die genaue Indexnummer des Workbooks, bekommt aber in der Zeile:
Sheets(strLocKeyContentSourceSH).Copy after:=Workbooks(3).Sheets(Sheets.Count)
im Debugger schon den fly-out "Index außerhalb des gültigen Bereiches.
Ich vermute ich mach etwas falsch in der Sheet-Verwaltung... aber was?
Bin für jeden Tipp dankbar ...
vg m
der code schaut an der Stelle so aus...
For intI = 1 To 10
Debug.Print ActiveWorkbook.Name
'check if last entry (Cx="") - if so leave procedure
If IsEmpty(Range("C" & CStr(intRow))) Then Exit Sub
strLocKeyContentSourceWB$ = Range("C" & CStr(intRow))
strLocKeyContentSourceSH$ = Range("D" & CStr(intRow))
strLocKeyContentNewSHName$ = Range("E" & CStr(intRow))
strLocKeyContentSide$ = Range("F" & CStr(intRow))
'read next row in keytable...
intRow = intRow + 1
strLocSourceFile = strPath & "\" & strLocKeyContentSourceWB &
strExtension 'build the source-files data...
Workbooks.Open (strLocSourceFile)
Debug.Print "ActiveWorkbook.Name: " & ActiveWorkbook.Name
'Set objWB = Workbooks(strLocKeyContentSourceWB$)
prcFindWorkbookIndex (ActiveWorkbook.Name)
Workbooks.Open (strPath & "\" & strStellenplanFileName)
Debug.Print "ActiveWorkbook.Name: " & ActiveWorkbook.Name
'Workbooks(ActiveWorkbook.Name).Close
prcFindWorkbookIndex (ActiveWorkbook.Name)
'Workbooks(strLocKeyContentSourceWB).Activate
Workbooks(2).Activate
Sheets(strLocKeyContentSourceSH).Select
Workbooks(3).Activate
Worksheets(Worksheets.Count).Select
Sheets(strLocKeyContentSourceSH).Copy after:=Workbooks(3).Sheets(Sheets.Count)
Workbooks(3).Activate
ActiveSheet.Name = strLocKeyContentNewSHName
Workbooks(3).Save
Workbooks(3).Close
Workbooks(2).Close
ThisWorkbook.Activate
Next intI

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sheets kopieren - Indexfehler #9
02.05.2018 09:42:24
Rudi
Hallo,
vermutlich
Sheets(strLocKeyContentSourceSH).Copy after:=Workbooks(3).Sheets(Workbooks(3).Sheets.Count)
Wozu ermittelst du aufwändig den WB-Index, wenn du den Namen kennst?
Select/ Activate sind zu 99% überflüssig.
VBA gut?
Gruß
Rudi
AW: Sheets kopieren - Indexfehler #9
02.05.2018 10:03:06
m.e.neubauer
Hallo Rudi,
...Wozu ermittelst du aufwändig den WB-Index, wenn du den Namen kennst?
Select/ Activate sind zu 99% überflüssig....
Stimmt; der Fehler trat aber bei genauer Benamsung auch auf und die expliziten Activates fallen später raus. Der Qualifier um das Workbook zu erweitern könnte ne Lösung sein. Probier ich nachher.. Danke
Gruß michael
Anzeige
AW: Sheets kopieren - Indexfehler #9
03.05.2018 14:14:10
m.e.neubauer
Hallo Rudi,
ich bin ein Stück weiter gekommen...
Die Lösung ist nicht (nur) das Einsetzen der Objektbezüge:
- Sheets(strLocKeyContentSourceSH).Copy after:=Workbooks(3).Sheets(Workbooks(3).Sheets.Count)
Damit konnte ich die Fehlerquelle besser aufdröseln.
Sheets.Count wird jeder Aktivierung des Ziel-Workbook um einen Zähler erhöht. Recorded man den Vorgang sieht man es genau im resultierenden code.
gruß Michael
Läst man Ihn ablaufen kommt der Indexfehler jedoch wieder hoch. Ursache ist der Umstand das ich Code und Arbeitsdateien trenne. Der Code wird nie im Zielfile ausgeführt und auch nicht im Quellfile eines Sheets. Daher muss das was manuell durch das clicken durch die Fenster (sichkontrolle) im Debug-Modus erfolgt im code nachgebildet werden:
Wurde ein Sheet im Zielfile eingefügt und umbenannt, folgt der nächste Schritt erst im Programmfile, das damit aktiv wird und den Focus bekommt. Der nächste Schritt im folgenden Quellfile wird damit aber mit dem Sheetindex des Programmfiles ausgeführt. Folge: Indexfehler.
Hier das Modell für das vierte Quellfile:
- Windows("Quell-file_No4.xlsx").Activate
- Sheets("myQuellsheet").Copy After:=Workbooks("Ziel-file.xlsx").Sheets(4)
- Windows("Ziel-file.xlsx").Activate
- Sheets("old-sheetname").Name = "new-sheetname"
- ThisWorkbook.Activate (damit der code im Programfile weiter ausgeführt wird)
Die Klarnamen jetzt durch Variablen ersetzen und den Sheets-counter in einer Schleife hochzählen dann ist es verallgemeinert.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige