VBA Excel Index außerhalb des gültigen Bereichs

Hallo zusammen,

ich hoffe mir kann jemand helfen. Ich habe folgendes Druckskript in Excel geschrieben:

Public Sub Report_drucken()

Dim aktuell As Integer 'Aktuell aktiviertes Sheet
Dim Druck() As String
Dim J As Integer
Dim i As Integer

'Druckerauswahl
Application.Dialogs(xlDialogPrinterSetup).Show

aktuell = ActiveSheet.Index 'Merkt sich aktuelles Sheet

Application.ScreenUpdating = False
Application.DisplayAlerts = False

i = Sheets(„Inhaltsverzeichnis“).Range(„SummeSeiten“).Value

ReDim Druck(1 To i)

i = 1

For J = 1 To 31
If Sheets(„Inhaltsverzeichnis“).Range(„Reportseiten“).Cells(J, 1) = 1 Then
Druck(i) = Sheets(„Inhaltsverzeichnis“).Range(„Tabellennamen“).Cells(J, 1)
i = i + 1
End If
Next J

Worksheets(Druck).Select
ActiveWindow.SelectedSheets.PrintOut Preview:=True

Worksheets(aktuell).Select 'Aktiviert das aktuelle Sheet wieder
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

Ich erhalte immer die Fehlermeldung „Index außerhalb des gültigen Bereichs“. Mit dem Debugger habe ich es schon laufen lassen. Die Varieblen i und j werden richtig gefüllt und das Array „Druck“ wählt auch die richtigen Seiten aus. Nur wenn er sie dann anzeigen soll, erscheint die Fehlermeldung. Ich habe keine Idee mehr. Kann mir vielleicht jemand helfen? Vielen Dank!

webkeks

Hallo Webkeks,

viele Möglichkeiten. Überprüfe nochmal alle Blatt/Bereichsnamen.

Wenn es nix bringt mache eine Kopie deiner mappe. Lösche/anonymisier alles was nicht gebraucht wird, hochladen mit file upload o.ä. s. FAQ:2606

Gruß
Reinhard

Hi Jessica,

leider hast Du nicht angegeben, in welcher Zeile der Fehelr auftritt.

Public Sub Report\_drucken()
Dim aktuell As Integer 'Aktuell aktiviertes Sheet
Dim Druck() As String
Dim J As Integer
Dim i As Integer
'Druckerauswahl
Application.Dialogs(xlDialogPrinterSetup).Show
aktuell = ActiveSheet.Index 'Merkt sich aktuelles Sheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
i = Sheets("Inhaltsverzeichnis").Range("SummeSeiten").Value
ReDim Druck(1 To i)
i = 1
For J = 1 To 31
 If Sheets("Inhaltsverzeichnis").Range("Reportseiten").Cells(J, 1) = 1 Then
 Druck(i) = \_
 Sheets("Inhaltsverzeichnis").Range("Tabellennamen").Cells(J, 1)
 i = i + 1
 End If
Next J
Worksheets**(Druck)**.Select
ActiveWindow.SelectedSheets.PrintOut Preview:=True
Worksheets(aktuell).Select 'Aktiviert das aktuelle Sheet wieder
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Ich vermute 'mal an der fettgedruckten Stelle: müßte es nicht heißen (Druck(i))?
Wenn Du nicht Option Explicit angegeben hast, würde Druck implizit als Variant deklariert und die Klammer wäre 0. Und Sheets(0) gibt es nicht.

Bitte verwende das nächste Mal die

-Tags, damit der Code leichter lesbar ist.

HTH.

Markus
\_\_\_\_\_\_\_\_\_\_\_\_\_

Außerdem verstehe ich den Code nicht so ganz. M.E. kannst Du Dir den _Druck()_-Array sparen, wenn Du den Druckbefehl direkt in der For-Schleife gibst. Soweit ich verstehe, liest Du aus dem Tabellenblatt Inhaltsverzeichnis den Namen des zu druckenden Tabellenblatts aus. Den kannst Du in eine einfache _String_-Variable stecken und direkt damit drucken.

Hallo Markus,

vielen Dank für Deine Antwort und den Hinweis. Der Fehler tritt an der Stelle „Worksheets(Druck).Select“ auf.

Ich lese alle zu druckenden Blätter aus und speichere die Tabellenamen in das Array. Im Debugger sieht es auch gut aus: Druck(1)„Hauptmenü“, Druck(2)„Inhaltsverzeichnis“ usw.

Zum Schluß möchte ich dies dann über „Worksheets(Druck).Select“ auswählen und mir in der Vorschau ansehen.

Ich habe es mal mit Druck(i))versucht, aber es funktioniert leider auch nicht.

Hast Du vielleicht noch eine Idee?

Vielen Dank und viele Grüße,

webkeks

Hallo Markus,

Ich vermute 'mal an der fettgedruckten Stelle: müßte es nicht
heißen (Druck(i))?

nein, m.E. müßte Worksteets(Druck) auch funktionieren.
Kannst ja mal sowas basteln

Sub Test()
Dim Druck(1 To 2)
Druck(1) = „Tabelle1“
Druck(2) = „Tabelle2“
Worksheets(Druck).PrintPreview
End Sub

Achja, mach bitte nicht den gleichen doofen Fehler wie ich, mit völlig leeren Blättern klappt der Code schon aber es tut sich halt nix sichtbares weil Excel keine leeren Blätter druckt/anzeigt *grins*

Ich vermute was ganz banales und fragte jessica vor drei Stunden etwas, keine Antwort bislang also mache ich mir erstmal keinen Kopp mehr.

Banal=Schreibfehler bei einem Namen. Falls doch nicht, anhand einer Beispielmappe hätte man den Fehler schon längst gefunden.

Gruß
Reinhard

Hallo Markus, hallo Reinhard,

vielen Dank für Eure Hilfe.

@Reinhard.Die Mail mit der Frage habe ich nicht bekommen. Aber es war wirklich etwas Banales: Ein Name war falsch geschrieben! Vielen Dank für den Hinweis! Manchmal kommt man alleine einfach nicht auf so einfache Sschen!

Viele Grüße

Jessica