752 Aufrufe
Gefragt in Tabellenkalkulation von
Hi,

mein Excel Macro kann  nicht ausgeführt werden da immer der Fehler 9 kommt. Wisst ihr eine Lösung?

Sub kopieren()
Dim variable As String
variable = [A1]
With Sheets(variable).UsedRange
.AutoFilter Field:=7, Criterial:="gleich"
.Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy
End With
Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Sheets(varibale).UsedRange.AutoFilter
End Sub

3 Antworten

0 Punkte
Beantwortet von flupo Profi (17.7k Punkte)

In der Fehlermeldung steht doch der Grund mit drin: "Index außerhalb des gültigen Bereichs".

Wahrscheinlich steht beim Start in A1 ein String drin, zu dem es kein passendes Tabellenblatt gibt. Das passiert beim Basteln ganz schnell. Es empfiehlt sich deshalb, zu Beginn des Makros per Select die gewünschte Start-Zelle auszuwählen.

In deinem Fall kannst du das Problem auch lösen, indem du bei der Belegung der Variablen das Tabellenblatt dazu schreibst.

variable = [Tabelle1!A1]

Gruß Flupo

0 Punkte
Beantwortet von
Hallo Community

Rückgabewert True/False

Gruß Nighty

Public Function SheetExists(strName As String) As Boolean
On Error Resume Next
SheetExists = Not Sheets(strName) Is Nothing
End Function
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

1. würde ich dir empfehlen, ganz zu oberst die folgende Codezeile zu ergänzen:

Option Explicit

Dann wird dir nämlich angezeigt, dass in der Zeile

Sheets(varibale).UsedRange.AutoFilter

der Ausdruck in der Klammer falsch geschrieben ist. Und falls du im VBA-Editor unter Extras -> Optionen -> "Variablendeklaration erforderlich" noch nicht aktiviert hast, würde ich das auf jeden Fall machen - dann wird in jedem (neu erstellten) Modul automatisch zu oberst die Codezeile "Option Excplicit" ergänzt, was dir bei der Kontrolle der Variablen-Schreibweise unheimlich behilflich ist.

2. kannst du in deinem Code auch ganz einfach in einer Schleife prüfen, ob das betreffende Tabellenblatt vorhanden ist:

Sub kopieren()
    Dim variable As String
    Dim wksTab As Worksheet
    Dim blnVorhanden As Boolean
    variable = [A1]
    For Each wksTab In Worksheets
        If wksTab.Name = variable Then
            blnVorhanden = True
            Exit For
        End If
    Next wksTab
    If blnVorhanden Then
        With Sheets(variable).UsedRange
            .AutoFilter Field:=7, Criterial:="gleich"
            .Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy
        End With
        Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
        Sheets(variable).UsedRange.AutoFilter
    Else
        MsgBox "Tabelle " & variable & " nicht vorhanden"
    End If
End Sub


Bis später, Karin

...