Clever-Excel-Forum

Normale Version: Sortieren per Makro scheitert - Laufzeitfehler 1004
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Zusammen,

ich habe ein Makro aufgezeichnet, welches eine Tabelle sortieren soll. Wenn ich dieses nun ausführe bekomme ich einen Laufzeitfehler '1004' Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen.

Nachfolgend der VBA-Code:

Code:
    ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Clear
    ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Add2 Key:=Range("Fehlerberichte[[#All],[FehlerID]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte"). _
        Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Komischerweise funkioniert das Makro auf einem anderen Tabellenblatt ohne Probleme. Die Namen der Bereiche und Tabellen habe ich mehrfach kontrolliert.


Code:
  ActiveWorkbook.Worksheets("Keyuser").ListObjects("Namen").Sort. _
        SortFields.Clear
    ActiveWorkbook.Worksheets("Keyuser").ListObjects("Namen").Sort. _
        SortFields.Add2 Key:=Range("Namen[[#All],[Name]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Keyuser").ListObjects("Namen"). _
        Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With



Hat jemand einen sachdienlichen Hinweis? Dafür wäre ich sehr dankbar...
Hallo,

ich rate jetzt mal ins Blaue hinein:
ändere mal SortFields.Add2 in SortFields.Add

Könnte aber auch sein, dass der Name der Tabelle/Überschrift falsch geschrieben ist.

Oder das Blatt mit dem Listobject ist nicht das aktive. Probier mal:
Code:
ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Clear
    ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Add2 Key:=ActiveWorkbook.Worksheets("Fehlerbericht").Range("Fehlerberichte[[#All],[FehlerID]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
Hat leider nicht geholfen. Interessant ist, dass wenn ich im Anschluss des Fehlers auf Debuggen drücke und dann F5 (weiter) Excel die Liste sortiert, so wie gewünscht.
(08.07.2020, 14:12)Der Steuerfuzzi schrieb: [ -> ]Oder das Blatt mit dem Listobject ist nicht das aktive.
Welches Blatt/welche Datei ist denn aktiv wenn Du das Makro ausführst?
Hallöchen,

sollte das Sortieren nicht unabhängig vom aktiven Blatt funktionieren?

Verwende das With mal etwas intensiver. Bei den bisherigen Ansätzen passen die Bereiche meist nicht 100%ig, z.B.

Code:
ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Clear
        ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Add2 Key:=[b]Range("Fehlerberichte[[#All],[FehlerID]]"),[/b] _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers

'oder

ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Clear
        ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Add2 Key:=ActiveWorkbook.Worksheets("Fehlerbericht").Range("Fehlerberichte[[#All],[FehlerID]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers

besser wäre

Code:
With ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte")
    .ListObjects("Tabelle1").Sort.SortFields.Clear
    .ListObjects("Tabelle1").Sort SortFields.Add2 Key:=.Range("Fehlerberichte[[#All],[FehlerID]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
End With
(10.07.2020, 11:14)schauan schrieb: [ -> ]sollte das Sortieren nicht unabhängig vom aktiven Blatt funktionieren?
Grundsätzlich schon, aber für den Sortierbereich ist das Blatt korrekt referenziert, während der Sortierschlüssel ohne Blattangabe (und damit das aktive Blatt) ist:
Code:
SortFields.Add2 Key:=Range("Fehlerberichte[[#All],[FehlerID]]"),
Da war meine Vermutung, dass der Fehler dadurch ausgelöst worden sein könnte.
Warum nicht:

Code:
with sheets("Fehlerbericht")
    .ListObjects(1).range.Sort .cells(1,3)
end with
(09.07.2020, 06:53)Der Steuerfuzzi schrieb: [ -> ]Welches Blatt/welche Datei ist denn aktiv wenn Du das Makro ausführst?
Das betreffende, also "Fehlerberichte"...

(10.07.2020, 11:14)schauan schrieb: [ -> ]Hallöchen,

sollte das Sortieren nicht unabhängig vom aktiven Blatt funktionieren?

Verwende das With mal etwas intensiver. Bei den bisherigen Ansätzen passen die Bereiche meist nicht 100%ig, z.B.

Code:
ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Clear
        ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Add2 Key:=[b]Range("Fehlerberichte[[#All],[FehlerID]]"),[/b] _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers

'oder

ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Clear
        ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte").Sort. _
        SortFields.Add2 Key:=ActiveWorkbook.Worksheets("Fehlerbericht").Range("Fehlerberichte[[#All],[FehlerID]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers

besser wäre

Code:
With ActiveWorkbook.Worksheets("Fehlerbericht").ListObjects("Fehlerberichte")
    .ListObjects("Tabelle1").Sort.SortFields.Clear
    .ListObjects("Tabelle1").Sort SortFields.Add2 Key:=.Range("Fehlerberichte[[#All],[FehlerID]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
End With

Hab ich getestet, leider kein Erfolg. Ich werd nicht schlau drauß, zumal der identische Code auf einem anderen Tabellenblatt/Makro funktioniert.
Reicht schon:

Code:
Sub M_snb()
  with sheets("Fehlerbericht")
   .ListObjects(1).Sort .cells(3,1)
  end with
End Sub
oder
Code:
Sub M_snb()
  sheets(1).ListObjects(1).Sort sheets(1).cells(3,1)
End Sub
Hallöchen,

mal noch ergänzend - "Fehlerbericht" und "Fehlerberichte" sind zwei verschiedene Blätter oder zumindest Namen.
.ListObjects("Tabelle1")
funktioniert dann auch nur, wenn die Tabelle auf dem Blatt so heißt.

@snb, Error 438 Sad
Seiten: 1 2