Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
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
Inhaltsverzeichnis

VBA für automatisches sortieren

VBA für automatisches sortieren
06.09.2016 10:15:14
Kalo
Moin moin,
habe mal wieder eine Frage. Ich möchte in meiner Datei (ist eine Auftragsübersicht) eine automatische Sortierung der Datensätze einbauen. Mit der normalen Sortierung muss man ja denke ich immer den entsprechenden Bereich manuell markieren und dann jedes mal die Sortierung neu ausführen. Hätte es gerne so, dass wenn ein neuer Auftrag mit einem neuen Termin eingegeben wird, nach Eingabe des Termin die Zeilen entsprechend sortiert werden. Da dies wahrscheinlich nur mit einem Makro geht habe ich es gegoogelt und dieses hier gefunden (ist schon für meine Zellbereiche angepasst):
Private Sub Workshett_Change(ByVal Target As Range)
If Not Appplication.Intersect(Target, Range("F12:F10000")) Is Nothing Then
Range("A12:H10000").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Range("A1").Select
End If
End Sub

Leider funktioniert es bei mir nicht. Es erfolgt überhaupt keine Sortierung. Habe ich evtl. was vergessen oder nicht beachtet?
Noch zur Info: Die Excel enthält bereits ein Makro, dass mir automatisch Mails schickt, sobald sich ein Termin eines Auftrags 3 oder weniger Tage in der Zukunft befindet oder bereits überschritten wurde und der Auftrag noch nicht als erledigt gekennzeichnet wurde. Natürlich sind auch in den Zeilen Formeln hinterlegt, die mir beispielsweise die Resttage anzeigen bzw. ermitteln.
Dieses Makro habe ich in einem neuen Modul eingebaut. Also habe ich nun zwei Module für die beiden Makros.
Für die Aufträge werden übliche Daten wie Nummer, Kunde usw. eingetragen und als letztes in Zeile F der Termin. Danach sollte sich alle Zeilen des Auftrags entsprechend einsortieren. Zeile G zeigt die Resttage, die anhand des Termins ermittelt werden und Zeile H ist nur für das Kennzeichnen des Auftrags als erledigt vorgesehen. Die Sortierung sollte aufsteigend erfolgen, also das die aktuelleren Termine bzw. die zeitnahen unten in der Liste stehen (weiß nicht wie ich es besser sagen soll :))
Die Zeilen können sich ruhig sortieren, sobald im Feld Termin ein Termin eingetragen wurde, also es muss nicht erst beim nächsten Start sein oder so was.
Vielleicht kann mir hier ja jemand damit helfen :)

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA für automatisches sortieren
06.09.2016 10:43:57
baschti007
Halli Hallo Kalo
Wasm steht denn in Range("A1") ?
Lag mal eine Bsp. Datei hoch
Gruß BAsti
AW: VBA für automatisches sortieren
06.09.2016 13:27:37
snb
Zuviele Tippfehler:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F12:F10000")) Is Nothing Then Range("A12:H10000").Sort Range(" _
A1")
End Sub

AW: VBA für automatisches sortieren
06.09.2016 16:31:58
Kalo
Hallo zusammen,
bin grade etwas verwirrt^^. Glaube es ist das Beste wenn ich hier nun mal die Beispieldatei hochlade.
Geht wie gesagt um die Spalte F nach der dann die Termine aufsteigend sortiert werden sollen, also das die aktuellen quasi unten in der Liste stehen. Der Bereich, den das umfasst ist von A12 bis H10000. Daher weiß ich auch nicht, ob da nun A1 oder A12 im Makro stehen muss. In A1 steht ja nichts, was in die Sortierung fällt. Bis zur Zeile 11 ist es ja auch fixiert, weil oben dann allgemeine Informationen stehen, die immer sichtbar sein sollen.
Hier ist der Link:
https://www.herber.de/bbs/user/108054.xlsm
Hoffe es kann mir jemand helfen :)
Vielen Dank und beste Grüße an euch!
Anzeige
AW: VBA für automatisches sortieren
06.09.2016 11:17:44
baschti007
Oder versuch es mal so
Gruß Basti

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ende
If Target.Address = Range("A1").Address Then ' wenn Eintag in A1 geändert wird dann Wird das  _
Makro ausgefürht
With Range("A12:H10000")
.Sort Key1:=Range("A1"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom ' Key1 ist so zusagen die Spalte also A die Sortiert wird von  _
Klein nach Groß
End With
End If
ende:
End Sub

wo? in welchem Modul?
06.09.2016 15:47:43
Michael
Hi,
das Worksheet_Change MUSS nicht in "irgendeinem" Modul stehen, sondern in dem TABELLEN-Modul zu dem Tabellenblatt, in dem es ausgeführt werden soll.
Schöne Grüße,
Michael
Anzeige
AW: wo? in welchem Modul?
07.09.2016 13:48:13
Kalo
Hi,
war jetzt nicht sicher ob meine Antwort hier evtl. untergegangen ist. Daher lade ich hier nochmal die Dummy Datei hoch mit den beiden Makros. Geht ja nur um die automatische Sortierung und irgendwo scheint da ein Fehler zu sein, da es ja nicht funktioniert.
Hier ist der Link:

Die Datei https://www.herber.de/bbs/user/108071.xlsm wurde aus Datenschutzgründen gelöscht


Danke für jede Hilfe ;)
AW: wo? in welchem Modul?
08.09.2016 14:26:28
Michael
Hi,
ich habe die Tippfehler beseitigt, die Sortierung ab Zeile 11 (die Überschrift wird dann automatisch erkannt) geändert und das Ganze ins richtige Modul, nämlich ins BLATT gesteckt und Modul2 gelöscht.
Datei anbei: https://www.herber.de/bbs/user/108080.xlsm
Schöne Grüße,
Michael
Anzeige
AW: wo? in welchem Modul?
09.09.2016 09:50:42
Kalo
Hi Michael,
vielen Dank für die Überarbeitung. Habe es eben getestet. Aber kann es sein das die Sortierung nur funktioniert, wenn zuerst ein Eingangsdatum eingetragen wird? Also das dadurch das Makro dann aktiviert wird? Wenn ich dies weg lasse erfolgt keine Sortierung. Sonst funktioniert es. Das wollte ich nur nochmal wissen, weil ich dann ja dran denken muss, das immer zwingend ein Eingangsdatum eingetragen wird.
Vielen Dank erstmal :)
AW: wo? in welchem Modul?
09.09.2016 10:11:18
Michael
Hi,
das wolltest Du ja anscheinend so, denn dafür sorgt die Codezeile mit dem Intersect (daß das Ding eben nur anspringt, wenn in Spalte F was eingegeben wird).
Ich habe Dir das Sortieren mal (zusätzlich!) auf einen Button gelegt: https://www.herber.de/bbs/user/108090.xlsm
Schöne Grüße,
Michael
Anzeige
AW: wo? in welchem Modul?
09.09.2016 18:58:34
Kalo
Hi,
ich glaube da ist vielleicht was missverstanden worden. Die Daten sollen anhand der Spalte F sortiert werden, also nach "Termin", sofern dort ein Termin eingetragen wird. So wie ich das jetzt sehe wird die Liste glaube ich anhand des Eingangsdatums sortiert. Mit der Sortierung wollte ich jedoch erreichen, dass die Auftragszeilen terminlich sortiert in der Liste stehen.
Das ist denke ich in dem Fall sinnvoll, da dann die Aufträge mit nahendem Datum ja automatisch auf rot gesetzt werden und dann durch die Sortierung alle mehr oder weniger zusammenhängend in der Liste stehen und nicht überall verteilt, sodass man nach roten Feldern suchen muss. Hintergrund ist der, dass Aufträge ganz unterschiedliche Termine haben können und dadurch in der Liste dann zusammenstehen sollen.
Also im Endeffekt soll die Liste anhand der Daten, die in Spalte F bei "Termin" eingetragen werden sortiert werden (sobald dort ein Datum eingetragen wird). Die komplette Auftragszeile soll sich dann an die entsprechende Stelle setzen. Das Eingangsdatum ist für die Sortierung dann nicht relevant.
Könnte hierfür vielleicht nochmal die Datei und das Makro entsprechend angepasst werden?
https://www.herber.de/bbs/user/108080.xlsm
Denn ich bin mittlerweile überhaupt nicht mehr sicher, wo in dem VBA was gesetzt werden muss ;)
Den Sortierbutton benötige ich nicht, daher hier die Datei ohne den Button.
Vielen Dank vorab und allen ein schönes Wochenende!!
Anzeige
AW: wo? in welchem Modul?
10.09.2016 15:53:44
Michael
Hi,
die zu sortierende Spalte gibst Du durch key an, wobei der oberste Werte der Spalte reicht.
Also: statt Key1:=Range("A11") schreibst Du Key1:=Range("F11")
Schöne Grüße,
Michael
AW: wo? in welchem Modul?
12.09.2016 11:23:32
Kalo
Hi Michael,
vielen Dank für die Info. Nach der Änderung funktioniert die Sortierung nun korrekt sortiert nach Spalte F. Eine Kleinigkeit hätte ich nun noch. Nach dem das Makro die Sortierung ausführt springt die aktive Zelle auf Zelle A11. Das ist denke ich durch den Befehl am Ende des Makros:
Range ("A12") .Select
so geregelt. Ich habe diesen versuchsweise einmal rausgelöscht und dann markiert er mir den kompletten Auswahlbereich und setzt die aktive Zelle dann aber trotzdem auf A12. Gibt es einen Befehl den ich dort anstatt A12 einfügen kann und der dann bewirkt das die aktive Zelle nach Ausführen des Makros bzw. der Sortierung dann eben weiterhin die entsprechende Zelle in Spalte F mit dem eingetragenen Termin ist? Also ich trage quasi den Termin in der entsprechenden Zelle in Spalte F ein, bestätige z.B. durch Enter was das Makro für die Sortierung auslöst (so wie es auch momentan funktioniert) und die aktive Zelle ist weiterhin die entsprechende Zelle in Spalte F an der neuen Stelle?
Dies ist ja nur ein kleiner "Schönheitsfehler" aber wäre schön wenn es hierfür einen Befehl gibt, da sonst nach der Sortierung ja immer an den Anfang der Liste zurückgesprungen wird und man erst wieder an die Stelle zurückscrollen müsste bzw. sie suchen müsste, wo man gerade dran gearbeitet hat.
Das Makro sieht nach Löschen des Schlussbefehls nun so aus:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F12:F10000")) Is Nothing Then
Range("A11:H10000").Select
Selection.Sort Key1:=Range("F11"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End If
End Sub

Vielen Dank jedenfalls schon mal für alles :D
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige