Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1544to1548
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
VBA automatisch Sortieren nach Einträgen
14.03.2017 17:25:46
Yannick
Hallo liebes Forum, ich habe einen Fall in VBA den ich lösen möchte und bitte um eure Hilfe! Ich habe eine Aufgabenliste angelegt. Es soll sortiert werden. Zunächst aufsteigend nach der erste Spalte A2 "Priorität" (Werte 1-10 1=hoch 10=niedrig). Als nächstes gibt es ein Feld namens "abgenommen" ...I2. Wenn hier drunter ein beliebiger Buchstabe eingetragen wird, soll bei J2 "erledigt" eine 1 erscheinen. Wenn in I2 "abgenomen" kein Wert liegt, soll bei J2 "erledigt", weiterhin eine 0 stehen. Wenn bei J2 "erledigt" eine 1 erscheint, soll die komplette Zeile nach unten verschoben werden, also im zweiten Schritt nach "erledigt" sortieren.
Das Ganze soll automatisch passieren, also über einen VBA-Makro.
Falls dies möglich ist und mir jemand dabei helfen könnte, wäre ich sehr sehr dankbar!
Ich stelle es mir so vor, dass ich täglich neue Aufgaben eintrage in die Tabelle und diese nach Prioritäten sortiert werden. Ich mächte, dass erledigte Aufgaben nach unten verschoben werden, da sie nicht mehr relevant sind. Eine Aufgabe ist erst erledigt, wenn mein Vorgesetzter seinen Kürzel einträgt und somit die Aufgabe abnimmt.
Ich hoffe das ist so weit verständlich. Wie gesagt, ich wäre sehr sehr dankbar für Hilfe
https://www.herber.de/bbs/user/112184.xlsx

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA automatisch Sortieren nach Einträgen
15.03.2017 11:33:54
Silas
Hi Yannick,
habe hier mal was zusammengebastelt, ist allerdings nicht perfekt. Du musst beachten, dass erst sortiert wird, wenn eine Aufgabe erledigt wurde. Neue Einträge müssen demnach an der richtigen Stelle bzgl. der Priorität eingefügt werden (neue Zeile einfügen). Sie dürfen nicht unter den erledigten stehen, weil sie sonst nicht wieder nach oben verschoben werden. Außerdem wird das Makro nicht ausgeführt, wenn du mehrere Zellen gleichzeitig veränderst (z.B. mehrere Kürzel löschen).
Probier einfach aus und sag mir, wenn was geändert werden soll (Hoffe, ich komme zeitlich dazu).
Füge folgenden Code in den Code deiner Arbeitsmappe ein (in der Entwickleransicht links auf "Tabelle1"):
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim lastrow As Integer
Dim i As Integer
Dim rw As Integer
Dim col_Prio As Range
Dim col_Abnahme As Range
lastrow = Cells(Rows.Count, 6).End(xlUp).Row
Set col_Abnahme = Tabelle1.Range(Cells(2, 9), Cells(lastrow, 9))
If Not Application.Intersect(Target, col_Abnahme) Is Nothing Then
For i = 2 To lastrow
If Tabelle1.Cells(i, 10).Value  "0" Then
Set col_Prio = Tabelle1.Range(Cells(2, 1), Cells(i - 2, 1))
Exit For
End If
Next
If i - 1 = lastrow Then
Set col_Prio = Tabelle1.Range(Cells(2, 1), Cells(lastrow - 1, 1))
End If
On Error GoTo weiter
If Target.Value  "" Then
If Target.Offset(0, 1).Value  "0" Then
Application.EnableEvents = True
Exit Sub
End If
rw = Target.Row
' "1" eintragen
Tabelle1.Cells(Target.Row, 10).Value = "1"
' Zeile wird verschoben
Tabelle1.Rows(lastrow + 1).Insert
Tabelle1.Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Cut _
Tabelle1.Range(Cells(lastrow + 1, 1), Cells(lastrow + 1, 10))
Tabelle1.Rows(rw).Delete
' Sortierung
Tabelle1.Range(Cells(2, 1), Cells(i - 2, 10)).Sort key1:=col_Prio, Order1:= _
xlAscending
ElseIf Target.Value = "" Then
Tabelle1.Cells(Target.Row, 10).Value = "0"
End If
End If
weiter:
Application.EnableEvents = True
End Sub
Hoffe, du kommst damit zurecht. Viel Spaß!
Gruß
Silas
Anzeige
AW: VBA automatisch Sortieren nach Einträgen
15.03.2017 14:27:28
Yannick
Hallo Silas,
vielen Dank für deine Mühe!
Allerdings kommt ein Laufzeitfehler: Laufzeitfehler 1004' bei:
Set col_Prio = ToDoList.Range(Cells(2, 1), Cells(i - 2, 1))
AW: VBA automatisch Sortieren nach Einträgen
15.03.2017 14:59:20
Werner
Hallo Yannick,
wäre es eine Alternative Datensätze die erledigt sind automatisch in ein anderes Tabellenblatt "Erledigt" zu übertragen und aus dem anderen Tabellenblatt zu löschen?
So schleppst du dort keine Datensätze mit dir rum, die doch eh schon erledigt sind. Und mit dem Sortieren nach Priorität hättest du auch keine Probleme.
Gruß Werner
AW: VBA automatisch Sortieren nach Einträgen
15.03.2017 15:13:01
Yannick
Hallo Werner,
daran habe ich noch nicht gedacht. Die Idee gefällt mir sehr gut. Wenn das möglich wäre, wäre das sogar eine bessere Lösung
Gruß Yannick
Anzeige
AW: VBA automatisch Sortieren nach Einträgen
15.03.2017 15:22:21
Yannick
Hallo Werner,
daran habe ich noch nicht gedacht. Die Idee gefällt mir sehr gut. Wenn das möglich wäre, wäre das sogar eine bessere Lösung
Gruß Yannick
AW: VBA automatisch Sortieren nach Einträgen
15.03.2017 17:08:47
Werner
Hallo Yannick,
teste mal. Im Blatt "In Bearbeitung" in Spalte J habe ich eine Formel hinterlegt für den Eintrag von 0 oder 1.
Bei Eingabe von fg in Spalte I Blatt "In Bearbeitung" wird erst geprüft, ob ein Eintrag in Spalte H vorhanden ist. Wenn nein wird nicht kopiert sondern eine entsprechende Meldung ausgegeben. Wenn ja wird die komplette Zeile von "In Bearbeitung" nach "Abgeschlossen" kopiert und die kopierte Zeile im Blatt "In Bearbeitung" gelöscht.
https://www.herber.de/bbs/user/112216.xlsm
Gruß Werner
Anzeige
MessageBox mit Ok bestätigen
16.03.2017 09:36:07
Yannick
Hallo Werner,
das klappt prima, danke!
Allerdings kommt wenn man kein Datum eingegeben hat die MSGbox "Datum eingeben". Diese MSGBox hört dann nicht mehr auf, selbst wenn man mit "ok" bestätigt.
Kannst du mir dahingehend noch helfen?
Vielen Dank schon einmal
Gruß Yannick
AW: VBA automatisch Sortieren nach Einträgen
16.03.2017 10:07:08
Yannick
Hallo Werner,
kannst du mir bitte noch die Formel erklären?
Gruß Yannick
AW: VBA automatisch Sortieren nach Einträgen
16.03.2017 10:41:07
Werner
Hallo Yannick,
zur Formel:
=WENN($B2="";"";WENN(UND($H2"";$I2="fg");1;0))
Teil1:
=WENN($B2="";"" wenn kein Eingangsdatum eingetragen ist, dann gib nichts aus.
Damit du die Formel auf "Vorrat" nach unten ziehen kannst. Ansonsten würde eine 0 eingetragen werden, obwohl keinerlei Daten in der Zeile vorhanden sind.
Teil2:
WENN(UND($H2"";$I2="fg");1;0)) wenn in H ein Entrag (Umsetzungsdatum ungleich leer) und in I "fg" eingetragen (Vorgang ist abgechlossen), dann 1 ansonsten 0 ausgeben.
Zum zweiten Problem:
Was meinst du mit der MsgBox "Datum eingeben" ? Ich hatte eine MsgBox drin die öffnet, wenn in Spalte I "fg" eingegeben wird obwohl in Spalte H kein Datum drin ist. Meldung der Box ist aber "Umsetzungsdatum fehlt noch." Meinst du die?
Wenn ja, dann kann ich das nicht nachvollziehen. Bei mir geht die nur einmal auf, so wie es auch sein soll. Beim klick auf OK schließt sich die Messagebox, das vorher in Spalte I eingetragene "fg" wird wieder gelöscht und die Zelle in der das Umsetzungsdatum fehlt wird selektiert.
Halst du ggf. noch weitere Event-Makros (Worksheet_Change, Worksheet_SelectionChange ...) in deiner Mappe?
Gruß Werner
Anzeige

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige