Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Fehler index ausserhalb des gültigen Bereich

Forumthread: Fehler index ausserhalb des gültigen Bereich

Fehler index ausserhalb des gültigen Bereich
13.01.2025 06:40:42
Markus
Hallo alle zusammen

Ich möchte gerne Tabellenblätter von einer Mappe in eine andere Mappe kopieren.
Meine Programmzeile liefert aber einen Fehler:


' Tabelle UserTools kopieren, wenn nicht vorhanden
If wsUserTools Is Nothing Then
On Error Resume Next
wbCurrent.Worksheets("UserTools").Copy _
After:=wbSelected.Sheets(wbSelected.Sheets.Count)
If Err.Number > 0 Then
Debug.Print Err.Number '9
Debug.Print Err.Description 'Index außerhalb des gültigen Bereichs
End If
End If


Im On Error habe ich die Fehlermeldung in den Kommentar geschrieben, damit es besser zu erkennen ist.

Ich verstehe nicht warum der Copy Befehl Index ausserhalb liefert.

Vielen Dank für Hinweise, welche den Index in den gültigen Bereich bringt.



Der gesamte code ist:

Sub OpenFileAndCopySheets()
Dim fd As FileDialog
Dim selectedFile As String
Dim wbSelected As Workbook
Dim wbCurrent As Workbook
Dim wsUserTools As Worksheet
Dim wsAdminTools As Worksheet
Dim wsUserWas As Worksheet
Dim sheetExists As Boolean

' Aktuelle Arbeitsmappe speichern
Set wbCurrent = ThisWorkbook

' Dateiauswahl-Dialog öffnen
Set fd = Application.FileDialog(msoFileDialogFilePicker)

With fd
.Title = "Wählen Sie eine Excel-Datei aus"
.Filters.Clear
.Filters.Add "Excel-Dateien", "*.xlsx; *.xls; *.xlsm"
.AllowMultiSelect = False

If .Show > -1 Then Exit Sub ' Abbrechen, wenn keine Datei ausgewählt

selectedFile = .SelectedItems(1)
End With

' Ausgewählte Datei öffnen
Set wbSelected = Workbooks.Open(selectedFile)

' Überprüfen, ob die Tabellen existieren und ggf. kopieren
On Error Resume Next ' Fehler ignorieren, falls das Blatt nicht existiert
Set wsUserTools = wbSelected.Worksheets("UserTools")
Set wsAdminTools = wbSelected.Worksheets("AdminTools")
On Error GoTo 0 ' Fehlerbehandlung wieder aktivieren

' UserTools kopieren, wenn nicht vorhanden
If wsUserTools Is Nothing Then
On Error Resume Next
wbCurrent.Worksheets("UserTools").Copy _
After:=wbSelected.Sheets(wbSelected.Sheets.Count)
If Err.Number > 0 Then
Debug.Print Err.Number '9
Debug.Print Err.Description 'Index außerhalb des gültigen Bereichs
End If
End If

' AdminTools kopieren, wenn nicht vorhanden
If wsAdminTools Is Nothing Then
'L$uft durch aber kopiert nicht weil es die tbl nicht gibt-
wbCurrent.Worksheets("AdminTools").Copy After:=wbSelected.Sheets(wbSelected.Sheets.Count)
End If

' UserWas kopieren, wenn nicht vorhanden
If wsUserWas Is Nothing Then
'Fehlermeldung 9 Index ausserhalb des gültigen Bereich
wbCurrent.Worksheets("AdminTools").Copy After:=wbSelected.Sheets(wbSelected.Sheets.Count)
End If

' Bestätigung ausgeben
MsgBox "Die erforderlichen Tabellen wurden geprüft und ggf. kopiert.", vbInformation, "Fertig"

End Sub
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler index ausserhalb des gültigen Bereich
13.01.2025 09:47:52
Onur
Poste doch mal den Code zur Abwechslung lesbar.
AW: Fehler index ausserhalb des gültigen Bereich
13.01.2025 12:21:11
Uduuh
Hallo,
warum kopierst du AdminTools 2 mal?
wsUserWas ist immer Nothing, da kein Set wsUserWas =... existiert.
Lösche alle unnötigen OnError. Dann findest du auch den Fehler.
Gibt es "AdminTools" und "UserTools" in wbCurrent?

Gruß ausm Pott
Udo
Anzeige
AW: Fehler index ausserhalb des gültigen Bereich
13.01.2025 11:46:03
MCO
Moin!

Ich kann mich ja irren, aber du willst von wo nach wo kopieren?

In der zu öffnenden Datei legst du schon die Variable "wsUserTools" fest auf das Worksheet Usertools.
Dann kopierst du aber aus der Ursprünglich geöffneten Datei dieses Sheet in wbselected
wbCurrent.Worksheets("UserTools").Copy After:=wbSelected.Sheets(wbSelected.Sheets.Count)


Da das Sheet da aber schon existiert kommt die Fehlermeldung.

Abhilfe: Zuerst das Sheet in die zu kopierende Datei löschen
application.displayalerts = false

wbCurrent.Worksheets("UserTools").delete
application.displayalerts = true


Hier nochmal der (unveränderte) Code im "Klartext"
Sub OpenFileAndCopySheets()


Dim fd As FileDialog
Dim selectedFile As String
Dim wbSelected As Workbook
Dim wbCurrent As Workbook
Dim wsUserTools As Worksheet
Dim wsAdminTools As Worksheet
Dim wsUserWas As Worksheet
Dim sheetExists As Boolean ' Aktuelle Arbeitsmappe speichern
Set wbCurrent = ThisWorkbook ' Dateiauswahl-Dialog öffnen
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Wählen Sie eine Excel-Datei aus"
.Filters.Clear
.Filters.Add "Excel-Dateien", "*.xlsx; *.xls; *.xlsm"
.AllowMultiSelect = False

If .Show > -1 Then Exit Sub ' Abbrechen, wenn keine Datei ausgewählt
selectedFile = .SelectedItems(1)
End With ' Ausgewählte Datei öffnen

Set wbSelected = Workbooks.Open(selectedFile) ' Überprüfen, ob die Tabellen existieren und ggf. kopieren On Error Resume Next ' Fehler ignorieren, falls das Blatt nicht existiert
Set wsUserTools = wbSelected.Worksheets("UserTools")
Set wsAdminTools = wbSelected.Worksheets("AdminTools")

On Error GoTo 0 ' Fehlerbehandlung wieder aktivieren ' UserTools kopieren, wenn nicht vorhanden
If wsUserTools Is Nothing Then On Error Resume Next
wbCurrent.Worksheets("UserTools").Copy After:=wbSelected.Sheets(wbSelected.Sheets.Count)

If Err.Number > 0 Then Debug.Print Err.Number '9
Debug.Print Err.Description 'Index außerhalb des gültigen Bereichs
End If
End If ' AdminTools kopieren, wenn nicht vorhanden
If wsAdminTools Is Nothing Then 'L$uft durch aber kopiert nicht weil es die tbl nicht gibt-
wbCurrent.Worksheets("AdminTools").Copy After:=wbSelected.Sheets(wbSelected.Sheets.Count)
End If ' UserWas kopieren, wenn nicht vorhanden

If wsUserWas Is Nothing Then 'Fehlermeldung 9 Index ausserhalb des gültigen Bereich
wbCurrent.Worksheets("AdminTools").Copy After:=wbSelected.Sheets(wbSelected.Sheets.Count)
End If ' Bestätigung ausgeben

MsgBox "Die erforderlichen Tabellen wurden geprüft und ggf. kopiert.", vbInformation, "Fertig"
End Sub


Gruß, MCO
Anzeige
AW: Fehler index ausserhalb des gültigen Bereich
21.01.2025 06:27:32
Markus
Sorry, irgendwie habe ich im Moment das Forum nicht wirklich im Griff. Dachte, dass der Code mit dem Button Code optimal kommen würde...
AW: Fehler index ausserhalb des gültigen Bereich
21.01.2025 06:37:18
Onur
Kompletten Code markieren (auswählen) und dann erst auf "Code" klicken.
AW: Fehler index ausserhalb des gültigen Bereich
21.01.2025 13:42:52
Markus
Smile, das hatte ich auch so gemacht. Aber dann hat ein Benutzer, ich glaube es war mon geantwortet dass ich den Code lesbar formatieren müsse. Code hatte alles in eine Zeile zusammengequetscht.
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige