09.04.2019, 09:56 (Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2019, 09:58 von XenOn655.)
Hallo,
ich habe ein folgendes Problem. Da meine VBA Kenntnisse gegen null laufen wollte ich euch Profis Fragen ob jemand mir sowas schreiben könnte.
Ich habe eine Wartungstabelle mit mehreren Blättern Maschine A Maschine B Maschine C ... Dort sind Wartungspositionen mit z.B. Fenster reinigen --> Betriebsstunden --> Wartungsintervall --> Letzte Wartung --> Wartung fällig --> Wartung erledigt --> Bemerkung
Ich möchte jetzt wenn jemand jetzt das Datum bei Wartung erledigt ändert und was Bei Bemerkung schreibt das es in einem Separaten Blatt (Schwarzer Pfeil im Bild) aufgeführt wird.
Könnte mir jemand damit helfen? Herzlichen Dank schon mal
09.04.2019, 10:46 (Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2019, 10:47 von XenOn655.)
Hallo,
In A1 soll dann stehen bei welcher Maschine (also MaschineA) geändert worden ist In B1 soll dann stehen was in der Zeile stand In C1 soll dann stehen in was es geändert worden ist In D1 soll dann stehen welcher User es geändert hat In E1 soll dann stehen wann es geändert worden ist mit Datum&Uhrzeit
und bei jedem Eintrag soll der neue Eintrag eine Zeile tiefer rutschen.
Wenn ich so drüber nachdenke, ist der Vorherzustand einer Zelle, also das was in B1 stehen soll, aufwändig zu erfassen. Man muss dann vor jeder Änderung den Zelleninhalt zwischenspeichern, und danach prüfen, ob überhaupt eine echte Änderung stattgefunden hat, oder ob der Benutzer die Zelle einfach nur wieder verlassen hat,....... Du könnstest jede Änderung in Tabelle1 eintragen. Den Vorherzustand siehst Du dann an dem historisch älteren Eintrag zur selben Maschine. Eine unechte Bearbeitung der Zelle, also nur aktivieren, und nichts ändern, würde dann trotzdem zu Einträgen in der Tabelle1 führen. Da musst Du nochmal drüber nachdenken, was hier der schönste Weg ist.
Sobald ein Mitarbeiter in der Spalte "Wartung erledigt" ein Datum einträgt und er das Tabellenblatt verlässt, soll dieser Eintrag in das "Log"-Blatt geschrieben werden. Anschließend soll die Spalte "Letzte Wartung" überschrieben werden mit dem Eintrag aus "Wartung erledigt". Danach wird "Wartung erledigt" wieder gelöscht!
easY das ist ein guter Einwand. Wäre es ein Programm schwer zu schreiben. Leider sind meine VBA Kenntnisse nicht so gut. Könntest du mir evtl. so ein Programm schreiben?
grundsätzlich könnte ich das, allerdings ruft jetzt die Arbeit und ich wäre ggf. erst morgen wieder am PC. Ich bin nicht der super-VBA-Programmierer, sodass das sicher einige Zeit in Anspruch nehmen würde. Vielleicht hilft dir ja auch ein anderer User aus dem Forum. Was auf jeden Fall helfen würde wäre ein Beispielmappe, die dem Aufbau deiner Mappe exakt entspricht jedoch nur anonymisierte Dummy-Daten enthält.
Option Explicit Const SPALTE_AENDERUNG = 8 'Nummer der Spalte auf deren Änderung reagiert wird Const SPALTE_DATUM = 8 'Nummer der Spalte die das zu übertragende Datum enthält
Const LOG_BLATT = "Tabelle1" 'Name des Blattes, das das Log enthält '#
Private Sub Worksheet_Change(ByVal Target As Range) 'Event bei Ändern eines Zelleninhalts
Dim Datum As Long Dim LetzteZeile As Long Dim Blattname As String
If Target.Column = SPALTE_AENDERUNG Then Datum = Cells(Target.Row, SPALTE_DATUM) Blattname = ActiveSheet.Name
ActiveWorkbook.Worksheets(LOG_BLATT).Columns(3).NumberFormat = "dd/mm/yyyy" ActiveWorkbook.Worksheets(LOG_BLATT).Columns(5).NumberFormat = "dd/mm/yyyy hh:mm" End If
End Sub Function TabellenendeSuchen(Arbeitsblatt As String, Spalte As Integer) As Long