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.

VBA Dynamischen Bereich sortieren ohne Blatt zu aktivieren
#1
Hallo zusammen,

ich hab ein Problem mit folgendem Code, der immer ab dem Sortieren Probleme macht (Objekt unterstützt diese Eigenschaft oder Methode nicht). Hab schon hin und her gefummelt, aber finde den Fehler nicht.


Zitat:With Application.Worksheets("Spielerliste")
Dim rng As Range
Dim anzahl As Integer
anzahl = WorksheetFunction.CountA(ThisWorkbook.Worksheets("Spielerliste").Range("N1:N2500")) - WorksheetFunction.CountBlank(ThisWorkbook.Worksheets("Spielerliste").Range("N1:N2500"))

    Set rng = Range(.Cells(1, "M"), .Cells(anzahl, "N"))

.rng.Sort Key1:=Worksheets("Spielerliste").Range("M1"), Order1:=xlAscending, Key2:=Worksheets("Spielerliste").Range("N1") _
    , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
    :=xlSortNormal
End With


Kann mir jemand sagen, woran es liegt?


Vielen Dank!
Antworten Top
#2
Hallöchen,

Du schreibst am Anfang

With Application.Worksheets("Spielerliste")

Bei allem, was dann dort vor dem End With passiert, brauchst Du das Blatt nicht mehr anzugeben, z.B:
nicht
ThisWorkbook.Worksheets("Spielerliste").Range("N1:N2500")
sondern
.Range("N1:N2500")

und musst aber konsequent darauf achten, dass der Punkt vor dem Bereich steht. Fehlt min. 1x, z.B.
nicht
Set rng = Range(.Cells(1, "M"), .Cells(anzahl, "N"))
sondern
Set rng = .Range(.Cells(1, "M"), .Cells(anzahl, "N"))

Wenn Du in verschiedenen Mappen unterwegs bist, solltest Du ThisWorkbook schon beim With verwenden, wenn der zu verwendende Bereich nur dort zutrifft.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hey, danke für die Hinweise! Aber auch wenn ich das ganze bereinige, bleibt der Fehler erhalten.

Zitat:With Application.Worksheets("Spielerliste")
Dim rng As Range
Dim anzahl As Integer
anzahl = WorksheetFunction.CountA(.Range("N1:N2500")) - WorksheetFunction.CountBlank(.Range("N1:N2500"))

    Set rng = .Range(.Cells(1, "M"), .Cells(anzahl, "N"))

.rng.Sort Key1:=.Range("M1"), Order1:=xlAscending, Key2:=.Range("N1") _
    , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
    :=xlSortNormal
End With

Der Fehler liegt wie gesagt irgendwo hier:

Zitat:.rng.Sort Key1:=.Range("M1"), Order1:=xlAscending, Key2:=.Range("N1") _
    , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
    :=xlSortNormal
Antworten Top
#4
Hallo sheady,

dann versuche es einmal so:
anz=letzte belegte Zeile in N
Wenn letzte belegte Zeile in M größer ist, dann ist anz letzte belegte Zeile in M


Code:
Sub Tabelle_sortieren()
   Dim rng     As Range
   Dim anz     As Integer
   
   With Application.ThisWorkbook.Worksheets("Spielerliste")

       anz = .Cells(Rows.CountLarge, "N").End(xlUp).Row
       If anz < .Cells(Rows.CountLarge, "M").End(xlUp).Row Then anz = .Cells(Rows.CountLarge, "M").End(xlUp).Row

       Set rng = .Range(.Cells(1, "M"), .Cells(anz, "N"))
   
       rng.Sort Key1:=.Range("M1"), Order1:=xlAscending, Key2:=.Range("N1") _
           , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:= _
           False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
           :=xlSortNormal
           
   End With

   Set rng = Nothing

End Sub

Was möchtest du eigentlich, mit der folgenden Zeile erreichen, bei genügend Leerzellen, geht anzahl ins Minus.

Code:
anzahl = WorksheetFunction.CountA(.Range("N1:N2500")) - WorksheetFunction.CountBlank(.Range("N1:N2500"))
Antworten Top
#5
Hallöchen,

beim With bitte

With ThisWorkbook.Worksheets("Spielerliste")

ohne Application

Ansonsten noch ein anderer Hinweis. Ich schrieb zwar von den Punkten vor den Bereichen, aber wenn Du einen mit Set definierst, kommt anschließend beim definierten keiner mehr davor.

Also nicht
.rng.sort
sondern
rng.sort
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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