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
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?
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.
Zuständig dafür ist der Befehl
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.
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).Rowder 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
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.
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.
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 SubIch 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?
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.
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.

