12.01.2018, 18:29 (Dieser Beitrag wurde zuletzt bearbeitet: 13.01.2018, 18:06 von WillWissen.
Bearbeitungsgrund: Formatierung
)
Hallo zusammen,
Ich arbeite mit einer Auftragsliste, daran würde ich gerne eine Verbesserung machen, ich weiss aber nicht wie das geht und ob es überhaupt geht. In der Liste geht es um Aufträge die man bearbeiten muss, diese sind mit allerlei Möglichkeiten versehen was momentan für mich wichtig wäre: wenn ein Auftrag erledigt ist aber auf dem Auftrag noch eine offene Bestellung vorliegt,… Das wäre für mich die bessere Lösung:
dass diese Aufträge unterhalb der aktuellen Aufträge verschoben werden und diese auch unterhalb bleiben (auch wenn ich eine Sortierung nach der Nummer mache), bis die Bestellung abgeschlossen ist.
Das wäre die alternative Lösung:
dass diese Aufträge in die zweite Tabelle „Bestellung“ verschoben werden und dort bleiben bis die Bestellung abgeschlossen ist und der Auftrag wieder in die erste Tabelle zurück verschoben wird.
Die Begriffe (Status: „erledigt“ und Bestellung: „JA“) sind aus einer Dropdownliste auszuwählen und könne immer geändert werden. Kann mir hier jemand einen Tipp geben, ob und wie ich dies am besten realisiere?
weil keiner den Thread bearbeitet hat habe ich mich der Sache mal angenommen. s. Beispieldatei. Ich weiss aber nicht ob mir eine Optimal Lösung gelungen ist??? Konnte es nicht in der Praxis testen.
Als Beispiel sind beide Datei Formate angehangen, aus Schutz vor Lucky für Kollegen als xlsx mit Makros im Tabellenblatt als Text.
Ich habe zwei verschieden Varianten ausprobiert: Modul1: kopiert die Bestellungen "JA" in die "Bestellung" Tabelle und nach erledigt Status (muss gesetzt sein) wieder zurück in die Werkzeugliste. Bei mir poppt dabei aber ein Dialogfeld auf weil mir die verknüpften Dateien fehlen!!
Modul2: setzt vor die Nummer den Wert "999_" und sortiert die Werkzeugliste. Dadurch rutschen die Bestellungen nach unten. Bei Status erledigt wird die alte Nummer generiert. Welche von den beiden Methoden die bessere ist wird die Praxis zeigen.
Zur Datensicherheit bitte den 1. Test nicht in der Originaldatei durchführen, sondern in der Beispieldatei. Bei einem neuen Makro weiss man nie ob nicht doch noch versehentlich ein böser Fehler drin ist. Im Beispiel zerstören wir keine Originaldaten.
Würde mi,ch freuen wenn die Lösung gefaellt udn Praxisgerecht ist. Das ist sicher ein Industrieeinsatz.
Das Modul2 ist die perfekte Lösung für mein Problem. Ich hätte da noch eine Frage dazu, kann ich die Prioritäten ändern?
Also wenn der Auftrag "erledigt" ist und die Bestellung "JA" ist, dass die Nummer "999_" vorgesetzt wird und wenn ich das "JA" entferne, dass der Auftrag dann wieder in die Liste integriert wird.
sicher können wir das Makro noch individuell zuschneiden, ich muss jetzt nur aufpassen das ich die Aufgabe richtig verstehe. Modul2 war das Modul zum kopieren in die Tabelle Bestellung, und von dort wieder in die Werkzeugliste zurückkopieren. Ist das korrekt??
Da kann ich auch nach dem Koieren die "999_" davorsetzen und wieder löschen! Sehe ich das richtig, wenn "JA" entfernt wird soll die Nummer zurückgesetzt werden?? Und was ist wenn "JA" bestehen bleibt?? Dann nicht zurücksetzen, aber wieder in die Werkzeugliste zurückkopieren?? Ich habe morgen noch eine Knobelaufgabe, kann etwas dauern bis ich fertig bin.
Also Modul2 ist für mich nur die Nummer "999_" davorsetzen.
In dem jetzigen Makro ist es wenn "JA" und wenn nicht "erledigt" das die Nummer vorgesetzt wird und wenn ich "erledigt" setzte dann wird die Nummer wieder Original.
Ich würde gerne wenn "erledigt" und wenn "JA" das die Nummer "999_" vorgesetzt wird und wenn ich das "JA" entferne das dann die Nummer wieder Original ist.
Würde das gehen und wenn ja kann man das auch so Programmieren, dass wenn die Nummer "999_" vorgesetzt wird das dann nicht noch eine Nummer "999_" vorgesetzt wird bei mehrfachem drücken?
Durch das verändern der Parameter habe ich das Ergebnis das ich erreichen wollte.
Das habe ich verändert: Bestellungen_nachunten_verschieben If .Cells(j, "I") <> "erledigt" Then
Bestellungen_wieder_einsortieren If .Cells(j, "P") <> "JA" Then
Jetzt fehlt nur noch, dass die Nummer "999_" nicht jedes mal neu geschrieben wird wen man die Funktion aufrufen wird? Also wenn die Nummer "999_" schon vorgesetzt ist, dass sie nicht nochmals vorgesetzt wird. (Wenn das geht)
Sub Bestellungen_nachunten_verschieben() On Error GoTo Fehler Application.ScreenUpdating = False With Worksheets("Werkzeugliste") 'LastZell in Bestellung + Werkzeugliþste finden lz = .Cells(Rows.Count, 2).End(xlUp).Row 'Rückwaerts Schleife zum Daten kopieren + löschen For j = 2 To lz If .Cells(j, "I") <> "erledigt" Then ElseIf .Cells(j, "P") = "JA" Then 'Zeile von A-Z kopieren in Bestellung kopieren .Cells(j, 2) = "999_" & Cells(j, 2) End If Next j
'Liste nach Nummer sortieren Call Werkzeugliste_sortieren End With Exit Sub Fehler: MsgBox "unerwarteter Fehler: " & Error() End Sub
ich freue mich sehr das du den Code selbstaendig erweitert hast, hast mir Arbeit abgenommen, Danke!!
Was mich vor allem freut ist, wenn man meinen Code versteht, und ihn dann selbst anpassen kann. So lernt man VBA. Zur letzen Frage hast du mir selbst die Lösug auf dem Silbertablett angeboten, ich sah deine Lösung direkt. Schau mal hier: (Vba ist sooo einfach!!)
If .Cells(j, "I") <> "erledigt" Then ElseIf .Cells(j, "P") = "JA" And Left(.Cells(j, 2), 3) <> "999" Then