Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Sortieren per Makro scheitert - Laufzeitfehler 1004
#1
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...


Angehängte Dateien Thumbnail(s)
       
Antwortento top
#2
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
Gruß
Michael
Antwortento top
#3
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.
Antwortento top
#4
(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?
Gruß
Michael
Antwortento top
#5
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
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#6
(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.
Gruß
Michael
Antwortento top
#7
Warum nicht:

Code:
with sheets("Fehlerbericht")
    .ListObjects(1).range.Sort .cells(1,3)
end with
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antwortento top
#8
(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.
Antwortento top
#9
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antwortento top
#10
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
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste