HERBERS Excel-Forum - das Archiv
Laufzeitfehler beim sortieren
Gordon

Moin,
ich möchte meine Liste gerne per Makro sortieren. Leider bekomme ich immer den Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht. Leider sehe ich den Fehler woran es liegen könnte nicht. Auch die VB-Hilfe konnte mir nicht weiterhelfen. Hat da jemand eine Idee? Hier mal der Quelltextbereich, wo die Sortierung drin steht:


'Unternehmensliste erstellen
Workbooks.Add
Anzahl = ActiveWorkbook.Sheets.Count
For i = 1 To Anzahl
Sheets("Tabelle" & i).Select
Select Case i
Case Is > 1
Sheets("Tabelle" & i).Select
ActiveWindow.SelectedSheets.Delete
End Select
Next i
'Daten vom Generator zu Unternehmensliste übertragen
ActiveWorkbook.Sheets("Tabelle1").Range("1:1").Value = ThisWorkbook.Sheets("Format Unt").Range(" _
1:1").Value
Set wksT = ActiveWorkbook.Sheets("Tabelle1")
lngT = 1
With ThisWorkbook.Sheets("Generator")
Do While .Cells(lngG + 1, 1) <> ""
lngG = lngG + 1
strAG = .Cells(lngG, 19)
strN = .Cells(lngG, 21)
lngT = lngT + 1
wksT.Cells(lngT, 2) = .Cells(lngG, 18).Value
wksT.Cells(lngT, 3) = strAG
wksT.Cells(lngT, 8) = "Unternehmen HH Modell 2008; Unternehmen ALLGEMEIN"
wksT.Cells(lngT, 10) = .Cells(lngG, 23).Value
Do While strAG = .Cells(lngG + 1, 19) And .Cells(lngG + 1, 1) <> ""
lngG = lngG + 1
strN = strN & "; " & .Cells(lngG, 21)
Loop
wksT.Cells(lngT, 1) = strN
Loop
End With
'Unternehmensliste formatieren und speichern
ActiveWorkbook.Sheets("Tabelle1").Cells.EntireColumn.AutoFit
ActiveWorkbook.Sheets("Tabelle1").Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range(" _
B2") , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "/" & Format(Date, "YYYY/MM/DD") & " _
_Listengenerator - Untern.xls", FileFormat _
:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
ActiveWorkbook.Close


AW: Laufzeitfehler beim sortieren
Kawensmann

Hallo,
dass die VB-Hilfe nicht weiterhilft, ist ja kaum zu glauben. Da stehen doch schöne Beispiele drin.
Die Sort-Methode kannst du nicht direkt auf das Sheet anwenden, sondern nur auf eine Range
also z.B.
Worksheets("Sheet1").Range("A1:C20").Sort usw.
oder
Worksheets("Sheet1").Range("A1").Sort usw.
wobei im letzteren Fall der aktive Bereich sortiert wird.
Gruß
Kawensmann

AW: Laufzeitfehler beim sortieren
Gordon

Danke,
aber nun bekomme ich bei folgendem Quelltext den Laufzeitfehler '1004':
ActiveWorkbook.Sheets("Tabelle1").Range("a2:j2501").Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("B2"), Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

AW: Laufzeitfehler beim sortieren
Andi

Hi,
so wie das jetzt in Deinem Code steht, kommt der SortKey aus Zelle C2 in der aktuell aktiven Tabelle, was nicht notwendigerweise Tabellle1 sein muss. Gib mal Workbook und Tabelle mit an und versuchs nochmal.
Ansonsten enthält die Fehlermeldung ja einige Hinweise auf die mögliche Ursache. Bist Du dem mal nachgegangen?
Schönen Gruß,
Andi

AW: Laufzeitfehler beim sortieren
Gordon

Moin Andi,


so wie das jetzt in Deinem Code steht, kommt der SortKey aus Zelle C2 in der aktuell aktiven  _
Tabelle, was nicht notwendigerweise Tabellle1 sein muss.


Aber den Quelltext davor "ActiveWorkbook.Sheets("Tabelle1").Cells.EntireColumn.AutoFit" führt er ja noch ohne Probleme aus, obwohl da auch die aktive Tabelle angesprochen wird. Und schon direkt danach meckert er aber über dien Sortierungsquelltext. Es geht da immer noch in der selben Tabelle umher.


Gib mal Workbook und Tabelle mit an und versuchs nochmal.


Da müßte ich ja mal fragen wie das geht, da ich dieses Workbook zu dem Zeitpunkt gerade erst im Makro erzeugt habe und es daher noch keinen spezifischen Namen hat. Oder sehe ich da etwas falsch?


Ansonsten enthält die Fehlermeldung ja einige Hinweise auf die mögliche Ursache. Bist Du dem  _
mal nachgegangen?


Mit der Fehlermeldung kann ich leider mit meinem beschränktem Wissen nichts anfangen. Auch nicht mit der Hilfe dazu.

AW: Laufzeitfehler beim sortieren
Andi

Hi,
Es geht da immer noch in der selben Tabelle umher.
Eben nicht.
Range("C2") bezeichnet die Zelle C2 in der aktiven Tabelle.
Sheets("Tabelle1").Range("C2") bezeichnet die Zelle C2 in Tabelle1, egal welche Tabelle aktiv ist.
Schönen Gruß,
Andi

AW: Laufzeitfehler beim sortieren
Rudi

Haallo,


With ActiveWorkbook.Sheets("Tabelle1")
.Range("a2").Sort Key1:=.Range("C2"), Order1:=xlAscending, Key2:=.Range("B2"), Order2:= _
xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With


Gruß
Rudi

AW: Laufzeitfehler beim sortieren
Gordon

Klasse,
so hat es geklappt. Aber macht "With" so einen großen Unterschied aus?
Danke + Gruß
Gordon

AW: Laufzeitfehler beim sortieren
Rudi

entscheidend ist die saubere Referenzierung.
Du könntest auch
ActiveWorkbook.Sheets("Tabelle1").Range("a2").Sort Key1:=ActiveWorkbook.Sheets("Tabelle1").Range("C2"), Order1:=xlAscending, Key2:=ActiveWorkbook.Sheets("Tabelle1").Range("B2"), Order2:= xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
schreiben.