Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 11:21:12
Christian
Hallo zusammen,
ich möchte immer die Bereiche B5 bis AB1000 sortieren.
Dafür habe ich das Makro:
Sub SortierenArabellaStefan()
Range("B5:AB1000").Select
ActiveWorkbook.Worksheets("Arabella").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Arabella").Sort.SortFields.Add Key:=Range("S5:S1000") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Arabella").Sort
.SetRange Range("B5:AB1000")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Das funktioniert soweit auch gut. Wenn aber die Zeile 5 ausgeblendet ist dann stürzt Excel ab. Kann mir da jemand helfen?
Die sollte auch kein fixer Wert sein. Eigentlich hätte ich da lieber die letzte gefüllt Zeilennummer stehen.
Danke im voraus.

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 11:51:23
Beverly
Hi Christian,
hast du schon mal versucht, den Bereich ab B4 zu sortieren (wenn diese eine Überschrift enthält) und beim Sortieren dann anzugeben .Header = xlYes anstelle von .Header = xlGuess?


AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 11:59:51
Christian
Hallo Beverly,
die Überschrift ist in Zeile 2. In den Zeilen 3 und 4 ist nichts für die Sortierung. Das müsste dann ausgeblendet werden.
Danke

AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 11:52:43
Klaus
Hallo Christian,
bei mir stürzt der Code nicht ab wenn Zeile 5 ausgeblendet ist. Da ich den Fehler nicht nachvollziehen kann, ist meine Lösung: blende Zeile 5 doch einfach im Makro ein, und am Ende bei Bedarf wieder aus. Nebenbei habe ich auch die Zeile "1000" gegen die letzte benutzte Zeile getauscht, und das unnötige .select raus geworfen.
Sub SortierenArabellaStefan()
Dim letzteZeile As Long
Dim bMerkt As Boolean
With Sheets("Arabella")
If .Range("B5").EntireRow.Hidden Then
.Range("B5").EntireRow.Hidden = False
bMerkt = True
End If
letzteZeile = .Cells(.Rows.Count, 19).End(xlUp).Row  'Letzte Zeile aus Spalte S
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("S5:S" & letzteZeile), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
.Sort.SetRange .Range("B5:AB" & letzteZeile)
With .Sort
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
If bMerkt Then .Range("B5").EntireRow.Hidden = True
End With
End Sub
Anmerkung: du schreibst von "Filtern" im Betreff, aber dein Code filtert nicht. Unterschlägst du uns etwas?
Grüße,
Klaus M.vdT.

Anzeige
AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 12:01:37
Christian
Hallo Klaus,
danke für dein Code.
Das Excel bei dir nicht abstürzt ist ja cool. Wäre schön zu wissen warum es bei mir so ist.
Ich habe jetzt deinen Code eingebaut.
Kann ich das mit letzteZeile auch in andere Codes einfügen?
Danke

AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 12:46:19
Klaus
Kann ich das mit letzteZeile auch in andere Codes einfügen?
Natürlich! Das ist ja nicht sortieren-Exklusiv.
Kurz zum Erklären:
Sub ZeigeLetzteZeile()
Dim letzteZeile As Long
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox letzteZeile
End Sub

Deine Tabelle hat 1048576 Zeilen. Der Rows.Count ergibt als 1048576.
Cells(1048576,1) ist Zelle A1048576. Gehst du in die Zelle und drückst STRG+UP (das ist in VBA end(xlup)) dann landest du in der letzten beschriebenen Zelle der Spalte A, meinetwegen A19. Das .Row gibt dir dann die Zeile der ermittelten Zelle - in diesem Fall die Zahl 19.
Willst du die letzte Zeile in Spalte H ermitteln, musst du im Code nur die 1 gegen eine 8 tauschen:
letzteZeile = Cells(Rows.Count, 8).End(xlUp).Row
im Beispiel habe ich das ganze in einem WITH-Rahmen verwendet, um direkt auf eine Tabelle zu referenzieren. Hast du eine Tabelle die "Arabella" heisst, dann gibt dir:
Sub ZeiteLetzteZeileBesserReferenziert()
Dim letzteZeile As Long
With Sheets("Arabella")
letzteZeile = .Cells(.Rows.Count, 8).End(xlUp).Row
MsgBox letzteZeile
End With
End Sub

Die letzte Zeile aus dem Blatt Arabella in Spalte H - egal welches Blatt gerade aktiv ist. Beachte die Punkte vor .cells und .rows.count, mittels derer auf den WITH-Rahmen Bezug genommen wird.
Daraus eine Adresse zu machen, im Beispiel Range("S5:S" & letzteZeile) ist dann reine Textverkettung.
Du fragst dich vielleicht, warum der Umweg über "Rows.Count" genommen wird. Und du hast recht,
letzteZeile = Cells(1048576, 1).End(xlUp).Row
würde genauso gut funktionieren. Das Problem: Unter xl2003 gibt es nur 64656 Zeilen, und unter späteren Excelversionen könnte es mehr Zeilen geben. Durch den Verzicht auf eine fixe Nummer bleibt der Code Versionsunabhängig funktional.
Viel Spaß!
Grüße,
Klaus M.vdT.

Anzeige
AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 13:15:32
Christian
Hallo Klaus,
die Erklärung ist der Hammer.
Ich habe mir das ausgedruckt und kann jetzt meine Codes ändern.
Bis lange habe ich alles auf Zeile 1000 beschränkt.
Danke Danke Danke

Danke für die Rückmeldung! owT.
21.01.2015 13:19:14
Klaus
.

AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
22.01.2015 07:47:40
Christian
Hallo Klaus,
ich habe deine Erklärung mal angewendet:
Private Sub CommandButton1_Click()
' Sortieren_nach_Auftrag_Position_Eingang_Kunde Makro
Dim letzteZeile As Long
With ActiveSheet
letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("B5:B" & letzteZeile), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("C5:C" & letzteZeile), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("D5:D" & letzteZeile), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("E5:E" & letzteZeile), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange .Parent.Range("A5:AB" & letzteZeile)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub
Ich hoffe es ist so richtig. Überall wo jetzt & letzteZeile stand war sonst eine 1000.
Ich erhoffe mir dadurch auch an Geschindigkeit gewonnen zu haben, weil ja nicht immer bis 1000 gesucht werden muss.
Wo binde ich in den Code das Bildschirm flimmern / aktualisieren ein?
Ich dachte mit diesem Code:
Application.ScreenUpdating = False ' Bildschirm flackern unterdrücken - Start ***
Application.ScreenUpdating = True ' Bildschirm flackern unterdrücken - Start ***
Danke für deine Hilfe.

Anzeige
AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
22.01.2015 08:11:34
Klaus
Hi Christian,
sieht doch sehr gut aus!
Screenupdating=False kannst du als erste Codezeile verwenden, =True als letzte.
Der Geschwindigkeitsunterschied zwischen dem sortieren von 1000 Zeilen und 19 Zeilen ist aber fast nicht zu spüren, behaupte ich mal. Dafür sind unsere heutigen Prozessoren zu gut. Die letzte Zeile abzufragen statt statischer Range-Angaben ist aber trotzdem guter Stil, ausserdem kann die Tabelle so auf 1001 Einträge wachsen ohne das die Makros aussteigen.
Die echten Makro-Geschwindigkeitsbremsen sind eher die automatische Berechnung von Formeln. Ich nutze dazu ein standarisiertes "More-Speed" Makro, das mal hier im Forum entstanden ist. Einfach folgendes in dein Modul 1 reinkopieren:
Public Static Sub GetMoreSpeed(Optional ByVal Modus As Boolean = True)
Dim intCalculation As Integer
If Modus = True Then intCalculation = Application.Calculation
With Application
.ScreenUpdating = Not Modus
.EnableEvents = Not Modus
.Calculation = IIf(Modus = True, xlManual, intCalculation)
.Cursor = IIf(Modus = True, 2, -4143)
End With
End Sub
und das ganze vor und nach deinem Makro aufrufen:

Private Sub CommandButton1_Click()
' Sortieren_nach_Auftrag_Position_Eingang_Kunde Makro
Dim letzteZeile As Long
GetMoreSpeed (True)
With ActiveSheet
[Dein Makro]
End With
GetMoreSpeed (False)
End Sub
und freuen wie fix das Makro durchrennt :-)
Grüße,
Klaus M.vdT.

Anzeige
AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
22.01.2015 09:45:41
Christian
Vielen Dank Klaus.
Ich denke, dass ich mich wieder melde - wenn ich darf.
Danke Danke

Danke für die Rückmeldung! Aber ...
22.01.2015 09:53:11
Klaus
... bitte lass die Beiträge nicht als "offen" markiert, wenn es keine Rückfrage mehr gibt.
Grüße,
Klaus M.vdT.

AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 12:00:37
UweD
Hallo
so?
Sub SortierenArabellaStefan()
'Range("B5:AB1000").Select 'brauchst du nicht
With ActiveWorkbook.Worksheets("Arabella")
If .Rows("5:5").EntireRow.Hidden Then
MsgBox "Zeile 5 ist ausgeblendet"
Exit Sub
End If
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("S5:S1000") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SetRange Range("B5:AB1000")
.Sort.Header = xlGuess
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With
End Sub
Gruß UweD

Anzeige
AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 12:02:49
Christian
Danke Uwe.
Ich probiere es mal aus.

Key Range / Set Range, Uwe!
21.01.2015 12:48:06
Klaus
Hallo Uwe,
du hast die Key-Range und die Set-Range nicht auf "Arabella" referenziert! Dadurch wird der Code unnötig fehleranfällig - und du bringst dem "neuen" unsauberes referenzieren bei :-) Fühle dich gerügt!
Grüße,
Klaus M.vdT.

Mea culpa
21.01.2015 12:53:35
UweD
hier die 2 fehlenden Punkte ..
:-)

AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 12:23:33
fcs
Hallo Christian,
ich hab jetzt mit dem Ausblenden von Zeilen kein Problem gehabt.
Der zu sortierende Bereich muss aber mindestens 2 zu sortierende Zeilen haben, sonst GrandeProblem.
Außerdem sollte man beim Parameter Header nicht Excel die Wahl überlassen, sondern mit xlYes oder xlNo eine fixe Vorgabe machen.
Hier dein Makro angepasst mit variabler Zeile für den Datenbereich.
Sub SortierenArabellaStefan()
Dim Zeile_L As Long
With ActiveWorkbook.Worksheets("Arabella")
.Activate
Zeile_L = .UsedRange.Row + .UsedRange.Rows.Count - 1
If Zeile_L > 5 Then
'Range("B5:AB1000").Select
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("S5"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange Range("B5:AB" & Zeile_L)
.Header = xlYes 'oder xlNo  bei xlGuess enscheidet Excel und dies ggf. Falsch
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End With
End Sub

Gruß
Franz

Anzeige
AW: Wenn Zeile 5 ausgeblendet keine Filterfunktion
21.01.2015 12:28:18
Christian
Danke Franz.
Funktioniert auch.

noch einer :-)
21.01.2015 12:49:12
Klaus
Hallo Franz,
auch du hast vergessen, Key-Range und Set-Range auf "Arabella" zu referenzieren :-) Ich muss jetzt weg, ich habe noch ganz viele Erbsen zu zählen.
Grüße,
Klaus M.vdT.

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige