Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Marko mit Sortierfunktion "Problem" Zellen einfügen





Frage

Hallo ein Name ist Stefan und mit Makros kenne ich mich leider nicht so gut aus. Trotzdem habe ich es geschafft ein Makro aufzuzeichnen, das einen markierten Bereich nach Zeilen aufsteigend sortiert. Mein Problem ist, das beim Einfügen von neuen Zeilen in diesen markierten Bereich nicht mehr alle Zeilen sortiert werden. Die unteren werden leider nicht mehr in dieses Marko miteinbezogen. Wie kann ich diesen Bereich fixieren , dass das Makro noch funzt wenn ich neue Zeilen einfüge. Außerdem soll die eingefügte Zeile die formatierung der oberen Zeile übernehemen. Vielen Dank im Vorraus Stefean

Antwort 1 von LittleT

das geht eigentlich ganz einfach.

Wenn du in den Visual Basic Editor schaust, (Tastenkürzel Alt + F11) dann siehst du dort Module links.
Hier wird der Quelltext zu deinem Makro angezeigt.

nachdem du die zeilen markiert hast müsste irgendwas mit:
worksheet("Tabelle1").range(a1:d5).select stehen

Wenn du die sortierung nur für eine spalte haben willst,
dann schreib am anfang
dim i as integer
i=1 <--Die Zeile in der der erste zu sortierende wert stehen soll
do while worksheets("Tabelle1").cells(i,1).value<>""

//Hier steht der Code den das makro ausführt

i = i+1
loop

Solltest du nicht zurecht kommen einfach nochmal fragen.
Gruß
LittleT

Antwort 2 von Tibo

Das verstehe ich nicht ? Ich habe schon den Bereicht der sortiert werden soll. der Besteht aus 25 Zeilen und 6 Spalten. Das Problem ist nur, das sich das Makro nicht dynamisch beim Einfügen von neuen Zellen an den dann größeren Bereich anpasst.

Private Sub CommandButton7_Click()
Range("C14:H39").Select
Selection.Sort Key1:=Range("C14"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C25").Select
End Sub

Das ist der Code. Hast du eine Idee?

Antwort 3 von coros

Hallo Tibo,

nachfolgend der Code, der den Bereich automatisch erweitern sollte.

Private Sub CommandButton7_Click()
Range("C14:H" & Range("H65536").End(xlUp).Row).Select
Selection.Sort Key1:=Range("C14"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C25").Select
End Sub

Zuständig dafür ist der Befehl

Range("H65536").End(xlUp).Row


der in Spalte H die letzte beschriebene Zelle ermittelt und diese Zeilenzahl an der Stelle in dem Code einfügt, bzw. verwendet.

Ich hoffe, Du meintest das so. bei Fragen melde Dich bitte.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 4 von Tibo

Hi Oliver das ist schon mal ne super Hilfe. Das Makro arbeitet super, nur habe ich dir Verschwiegen, dass ich dieses Markro viermal und zwar in Form eines Quadrats, angeordnet habe. Leider zerschießt jetzt das neue Makro nach dem Einfügen von Zeilen das darunterliegen Makro. Der rechte Sortierungsbereich ist bestimmt auch betroffen.

ich stell mal die vier Makros rein.

Private Sub CommandButton7_Click()
Range("C14:H39").Select
Selection.Sort Key1:=Range("C14"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C25").Select
End Sub



Private Sub CommandButton8_Click()
Range("I14:N39").Select
Selection.Sort Key1:=Range("I14"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C25").Select

End Sub



Private Sub CommandButton9_Click()
Range("C41:H51").Select
Selection.Sort Key1:=Range("C41"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub



Private Sub CommandButton10_Click()
Range("I41:N51").Select
Selection.Sort Key1:=Range("I41"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C25").Select


End Sub


Es wäre super wenn auch hierzu noch eine Antwort hast.
Danke bis dann Tibo

Antwort 5 von coros

Hallo Tibo,

nachfolgend mal Deine 4 Code mit den entsprechenden Änderungen. Müsste eigentlich so funktionieren, ist aber ungetestet, da ich jetzt weg muss und daher im Moment keine Zeit habe mir eine Beispieldatei zu erstellen. Daher teste das erst mal in einer Kopie Deiner Datei.

Tausche bitte nachfolgenden Code gegen Deinen kompletten Code aus.

Public erste_Leerzeile As Integer

Private Sub CommandButton7_Click()
For erste_Leerzeile = 1 To Cells.SpecialCells(xlLastCell).Row
If IsEmpty(Cells(erste_Leerzeile, 3)) Then
Exit For
End If
Next erste_Leerzeile
Range("C14:H" & erste_Leerzeile - 1).Select
Selection.Sort Key1:=Range("C14"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C25").Select
End Sub



Private Sub CommandButton8_Click()
For erste_Leerzeile = 1 To Cells.SpecialCells(xlLastCell).Row
If IsEmpty(Cells(erste_Leerzeile, 9)) Then
Exit For
End If
Next erste_Leerzeile
Range("I14:N" & erste_Leerzeile - 1).Select
Selection.Sort Key1:=Range("I14"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C25").Select
End Sub



Private Sub CommandButton9_Click()
For erste_Leerzeile = 1 To Cells.SpecialCells(xlLastCell).Row
If IsEmpty(Cells(erste_Leerzeile, 3)) Then
Exit For
End If
Next erste_Leerzeile
Range("C41:H" & erste_Leerzeile + 1).Select
Selection.Sort Key1:=Range("C41"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub



Private Sub CommandButton10_Click()
For erste_Leerzeile = 1 To Cells.SpecialCells(xlLastCell).Row
If IsEmpty(Cells(erste_Leerzeile, 9)) Then
Exit For
End If
Next erste_Leerzeile
Range("I41:N" & erste_Leerzeile + 1).Select
Selection.Sort Key1:=Range("I41"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C25").Select
End Sub


Ich hoffe, es funktioniert. Wenn nicht, bitte melden, dann werde ich mir eine Beispieldatei erstellen um das zu testen.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von Tibo

Leider hat es noch nicht geklappt. Da kommt eine Fehlermeldung.
Range("C14:H" & erste_Leerzeile - 1).Select

kannst du damit etwas anfangen?

Antwort 7 von coros

Hallo Tibo

ich hatte ja gesagt, dass ich die VBA-Code nicht getestet habe. Ein Fehler ist mir zwar jetzt aufgefallen, der hat aber nichts mit dem von Dir geschriebenen Fehler zu tun. Um Dir helfen zu können muss man etwas mehr über den Aufbau Deiner Tabelle wissen. Ich bin davon ausgegangen, das die Zeile 40 eine Leerzeile ist, wegen der Zellbezüge in Deinen VBA Codes. Nun bin ich aber der Meinung, dass diese Zeile eventuell gar nicht leer ist, stimmt das?

Du müsstest mal schreiben, wie Deine Tabelle aussieht. Eventuell kannst Du die Datei ja auch im Internet bereitstellen ( z.B. hier ) oder Du schickst mir die Datei mal per Mail. Meine E-Mailadresse findest Du auf meiner HP u. a. im Impressum. Binde in der Betreffzeile irgendwie das Wort "Supportnet" und den Namen (Nickname), unter dem Du hier gepostet hast mit ein, da ich alle Mails deren Absender ich nicht kenne, ungelesen lösche.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.