Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1956to1960
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

Änderungsdatum einer Zelle in Nachbarzelle speichern

Änderungsdatum einer Zelle in Nachbarzelle speichern
25.12.2023 00:38:02
Christoph B.
Hallo Leute!
Ich kann mit 5% der Excelmöglichkeiten leidlich umgehen, VBA ist für mich ein völlig unbekanntes Terrain, lediglich ein Makro bekomme ich aufgezeichnet und manchmal klappt auch die Anwendung der Aufzeichnung :) Soweit vorweg zu meinem Wissensstand.
Nun bin ich mal wieder auf für mich unüberwindbare Hürden gestoßen, dei wohl mit meinem bescheidenen Formelwissen nicht lösbar sind. Die Recherche im Netz hat mich hierher verschlagen und zu dem Entschluss gebracht, mich erstmalig in einem derartigen Profi-Forum auch anzumelden.
Soweit der Vorspann :) Nun zu menem Problem, das hier schonmal 2017 beantwortet wurde.

Tom fragte am 05.09.2017 10:10:37, wie man u.a. ein Speicherdatum in einer neben dem eigenen (oder fremden) Eintrag liegende Zelle darstellen könnte, so dass es unveränderbar verbleibt.
Beispiel: in A1 (und danach in darunter liegenden Zellen A2 ff.) erfolgt ein Eintrag, in B1 wird automatisch das Datum (und ggf. die Uhzeit) des Eintrags gespeichert.

Antwort damals von Uwe D., es ginge nicht mit einer Formel, sondern nur mit dem folgenden VBA-Code:
-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim z
On Error GoTo Fehler

If Not Intersect(Range("B:B"), Target) Is Nothing Then
If Target.Row = 1 Then Exit Sub
For Each z In Target
If z.Offset(0, -1) > "" Then

Application.EnableEvents = False

z.Offset(0, 1) = Format(Date, "DD.MM.YYYY")
z.Offset(0, 2) = Environ("Username")

End If
Next
End If

'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number > 0 Then MsgBox "Fehler: " & _
Err.Number & vbLf & Err.Description: Err.Clear
End Sub
----------------------

Ich habe ihn nach Anweisung hineinkopiert und es funktionierte einwandfrei. Datei als xlsm gespeichert, fertig, dachte ich. Super Lösung!

Heute, einen Tag später steht der code zwar im code-fenster drin, funktioniert aber nicht mehr. Datei ist als "...mit Makros" also .xlsm gespeichert.

Gibt es hier eine Lösung für VBA-Unkundige, die mir jemand "kurz" erklären könnte?

Für eine Antwort wäre ich echt dankbar. Die Lösung erspart mir bei der Daenerfassung das manuelle eingeben des Erfassungsdatums für einen Datensatz.

Viele weihnachtliche Grüße!

Christoph B.



18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderungsdatum einer Zelle in Nachbarzelle speichern
25.12.2023 06:12:01
Oberschlumpf
Hi Christoph

Willkomenn im besten Forum der Welt! :-)

Dein gezeigter Code reagiert bei Änderung in Spalte B! Aber du willst doch, dass der Code reagieren soll, wenn du in Spalte A etwas änderst, oder?

Änder mal diese Codezeile...
If Not Intersect(Range("B:B"), Target) Is Nothing Then

...um in...
If Not Intersect(Range("A:A"), Target) Is Nothing Then

...jetzt sollte es so laufen, wie du erwartest.

Hilfts?

...kleiner Tipp...
Du musst nich so ne Romane schreiben...bis ich endlich das las, was mich interessierte, nämlich deine Frage, musste ich erst mal deine halbe Lebensgeschichte erfahren :-)
Du kannst natürlich weiter so machen, wie du es möchtest...von mir is es nur n Tipp ;-)

Ciao
Thorsten
Anzeige
AW: Danke freut mich, auch Dank an die Kollegen
26.12.2023 17:50:04
Piet
Hallo

Danke, es freut mich das meine Lösung gefällt, und ja, ich stelle gerne eine fertige Lösung ins Forum. Sage auch warum.
Als jahrelanger Ratgeber sehe ich ja auch, wie oft Frager mit den Antworten nicht zurechtkommen, besonders bei VBA.

Obwohl meine Programmiertechnik aus der Zeit Excel 95/97 stammt, somit uralt ist, erwarte ich von keinem Anfänger das er in der Lage ist meine Gedankengänge zu vollziehen, geschweige den so einen Code aus dem Ärmel zu schütteln. Erfahrung und Wisssen macht sich immer bemerkbar.

Es macht mir aber Spass dabei zu sein, und vor allem "harte Nüsse" zu knacken. Das war meine liebste Sache in der Zeit als Servictechniker.
Wenn man in 12 Jahren über 10.000 Geräte beim Kunden vor Ort repriert hat, muss man fachlich fit sein, vor alle logisch denken können.

Ich würdige aber auch den Eifer der Kollegen, und ihr habt oft tolle Ideen und Lösungsvorschläge. Macht weiter so.

mfg Piet
Anzeige
AW: Änderungsdatum einer Zelle in Nachbarzelle speichern
25.12.2023 09:59:04
Christoph B.
Hallo Torsten! :)

Den Tip nehme ich gerne an. In vielen anderen Foren geht erstmal das "Geheule" los, warum man nicht mehr zu seinem status quo schreibt, daher der "Roman", danach kommen die "Schwätzer" mit Antworten, die keine sind. Nach Durchsicht vor der Anmeldung ist die Gefahr hier nicht so groß :)

Zu Deiner Antwort:
Ich habe mich da nicht deutlich genug ausgedrückt, offenbar. Die Spaltenbezeichnung habe ich schon ganz konkret auf meine Tabelle selbst angepasst und das Skript? Makro? wirkt dennoch nicht. Zur Vereinfachung des Textes habe ich Zelle A1 und B1 herangezogen.

Also Konkret:
In den Spalten A bis H werden Daten eingetragen und zum Teil Formeln genutzt, nichts wildes, jedenfalls ohne Bezug auf die Daten in H oder in I. In Spalte I soll, sobald in der Zelle H ein Eintrag erfolgt, das Datum des Eintrages erscheinen und unveränderbar gespeichert werden (wesegen ja heute() nicht geeignet ist). Ich habe schon aus "B:B" das "H:H" gemacht und das funktionierte. Jezt nicht mehr.

Danke für deine Antwort bisher. Ich hoffe, du hast noch mehr :)

Gruß.

Chrisotph B.
Anzeige
AW: Änderungsdatum einer Zelle in Nachbarzelle speichern
25.12.2023 10:11:17
RPP63
Moin!
Das Ereignismakro hast Du im Modul der Tabelle (nicht in einem allgemeinen Modul) gespeichert?
Falls ja, dann lade mal die Datei hoch.

Gruß Ralf
AW: Änderungsdatum einer Zelle in Nachbarzelle speichern
25.12.2023 10:12:07
hary
Moin
Private Sub Worksheet_Change(ByVal Target As Range)

Dim z
On Error GoTo Fehler
If Not Intersect(Range("H:H"), Target) Is Nothing Then
If Target.Row = 1 Then Exit Sub
For Each z In Target
Application.EnableEvents = False
z.Offset(0, 1) = Format(Date, "DD.MM.YYYY")
Next
End If
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number > 0 Then MsgBox "Fehler: " & _
Err.Number & vbLf & Err.Description: Err.Clear
End Sub

gruss hary
Anzeige
AW: Änderungsdatum einer Zelle in Nachbarzelle speichern
25.12.2023 10:26:23
Christoph B.
Hallo hary!

Danke! Funktioniert genu so wie gewünscht. Ich bin gespannt, ob es so bleibt, bzw. wüsste gern, was dazu geführt hat, dass es nicht mehr funktionierte. Bin für Tips dankbar, würde den "Fehler" gern in Zukunft vermeiden.

@RPP63: Danke, ich hoffe aber, dass die Lösung von hary dauerhaft vorhält.

Euch beiden vielen Dank für die Beschäftigung an den Feiertagen. Mich lassen solche Probleme nicht los, bis ich eine Lösung finde, auch wenn sie darin besteht, wenn unvermeidbar, andere damit zu beschäftigen. :)

Weiterhin schöne Feiertage!

Christoph B.
Anzeige
wenn erledigt,muss ja nich weiter offen markiert sein...owT
25.12.2023 10:47:47
Oberschlumpf
AW: alten Code auskommentiert
25.12.2023 10:53:23
hary
Moin
was dazu geführt hat, dass es nicht mehr funktionierte.
Dim z

On Error GoTo Fehler '-- bei Codefehler springe zu "Fehler:"
If Not Intersect(Range("B:B"), Target) Is Nothing Then '--bei Aenderung in SpalteB
If Target.Row = 1 Then Exit Sub '--wenn erste Zeile(B1) geaendert wird Code beendet
For Each z In Target '-- Schleife ueber Zellen auch wenn Inhalte ueber kopieren eingefuegt werden
If z.Offset(0, -1) > "" Then '-- Wird geprueft ob SpalteA nicht leer ist
Application.EnableEvents = False '-- Event ausschalten da sonst bei Eintrag(auch vom Code) das Changeereigniss immer wieder ausgefuehrt wird(Endlosschleife)
z.Offset(0, 1) = Format(Date, "DD.MM.YYYY") '--1. rechte Spalte(vom Target) Datum eintragen
z.Offset(0, 2) = Environ("Username") '--2. rechte Spalte(vom Target) Benutzername eintragen
End If
Next
End If
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True '--Event wieder einschalten(wichtig)
If Err.Number > 0 Then MsgBox "Fehler: " & _
Err.Number & vbLf & Err.Description: Err.Clear

gruss hary
Anzeige
AW: hier mit Blattschutz
25.12.2023 11:03:35
hary
Moin nochemal
Hier mit Blattschutz.
Dim z

On Error GoTo Fehler
If Not Intersect(Range("H:H"), Target) Is Nothing Then
ActiveSheet.Unprotect '--Schutz aufheben
If Target.Row = 1 Then Exit Sub
For Each z In Target
Application.EnableEvents = False
z.Offset(0, 1) = Format(Date, "DD.MM.YYYY")
Next
End If
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
ActiveSheet.Protect'--Schutz setzen
If Err.Number > 0 Then MsgBox "Fehler: " & _
Err.Number & vbLf & Err.Description: Err.Clear

gruss hary
Anzeige
Anmerkung zu EnableEvents
25.12.2023 11:04:29
RPP63
Moin again!
• Ich würde das Abschalten der Events nicht inner- sondern außerhalb der Schleife vornehmen.
(ist aber recht egal, da es nicht zeitkritisch ist)
• Ich würde sogar komplett darauf verzichten, da es keinesfalls zu einer Endlosschleife führt, da das folgende Change nicht das Target betrifft.
Heißt konkret: Das Change wird einmalig erneut aufgerufen, aber sofort wieder abgebrochen.

Gruß Ralf
AW:@Ralf
25.12.2023 11:10:48
hary
Moin Ralf
führt, da das folgende Change nicht das Target betrifft.
Heißt konkret: Das Change wird einmalig erneut aufgerufen, aber sofort wieder abgebrochen.

Hast Recht,!! Springe zwischen Com und Herd hin und her ;-))
gruss und froWeih
hary
Anzeige
AW: AW:@Ralf und hary
25.12.2023 13:53:15
Christoph B.
@hary und Ralf

Das mit der Schleife liegt bei mir derzeit hinter dem horizont :) darum wäre ich dir hary dankbar, wenn du den code mit dem richtigen Schleifchen versehen noch einmal anpassen würdest. Natürlich nachedem das Gericht genossen wurde. Über die Feiertage gilt euch mein Dank doppelt!

Ich habe den code "mit Blattschutz" natürlich sofort ausprobiert :) Es funkitoniert leider nicht. sind die Zellen in der Spalte H geschützt formatiert und der Blattchutz zugeschaltet, funktioniert der code nicht. Nach der Abschlatung des Schutzes dann aber auch nicht mehr. Habe ihn glöscht und den "ohne Blattschutz" wieder eingefügt. jetzt geht es wieder.

Ich bin froh, dass ihr euch damit beschäftigt, es mir schon zum Teil hilft und habe daher die Geduld, zu warten. Also bleibe ich gespannt.

LG

Christoph B.
Anzeige
AW: Frage
25.12.2023 15:53:03
hary
Moin
Wie traegst du in SpalteH etwas ein wenn du das Blatt geschützt hast?
Der Code wirkt bei haendischem Eintrag. In SpalteH sollte der Zellschutz rausgenommen werden.
Ansonsten lad mal eine Bsp.-mappe hoch.
Gruss hary
AW: Frage
25.12.2023 20:05:24
Christoph B.
Ich habe mich unpräzise ausgedrückt und falsch noch dazu. Hier die Korrektur:

Das Tabellenblatt enthält unteschiedlich in Zellen konfigurierten Schutz. Einge Spalten und Zeilen sind mit einem Zellschutz versehen, damit mir der Nutzer die Formeln nicht zerschießt, andere sind ohne Zellschutz konfiguriert.

Die Spalte I (nicht wie ich schrieb H...) wollte ich mit Schutz versehen, nachdem ich den code (mit Schutz) eingefügt habe. In der Beispieltabelle ist sie dunkelgrau gefärbt.

Ich lade die Tebelle ohne Daten zur Ansicht hoch. Der code (mit Schutz) ist drin und nun funktioniert es nicht mehr.

https://www.herber.de/bbs/user/165475.xlsm

Nutze ich den code ohne implementierten Schutz geht es wieder.

Ziel: Der Erfasser soll das Antragsdatum erfassen (liest er von Papier ab) und das Erfassungsdatum wird in der Zelle rechts daneben automatisch eingetragen und gespeichert. Es soll nicht versehentlich gelöscht werden oder geändert werden. Eine gewollte Änderung durch z.B. Korrektureintrag an einem anderen Datum soll möglich sein.

Gespannte Grüße!

Christoph B.
AW: Frage
25.12.2023 21:23:47
Piet
Hallo

dieses Makro führt keine For Next Schleife aus, sondern setzt das Datum immer nur bei der Eingabezelle.
Löscht man das Datum wird auch Spalte H gelöscht! Bei Fehleingabe (kein Datum) kommt Fehlermeldung.

mfg Piet

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo Fehler
If InStr(Target.Address, ":") Then Exit Sub
If Target.Row 10 Then Exit Sub
If Not Intersect(Range("H:H"), Target) Is Nothing Then
Application.EnableEvents = False
If Not IsDate(Target) And Target.Value > "" Then
MsgBox "ungültiges Datum!", vbInformation
End If
ActiveSheet.Unprotect '--Schutz aufheben
Target.Offset(0, 1) = Format(Date, "DD.MM.YYYY")
If Target.Value = "" Or Not IsDate(Target) Then
Target.Offset(0, 1).Value = ""
Target.Value = "": Target.Select
End If
Application.EnableEvents = True
ActiveSheet.Protect '--Schutz setzen
End If
Exit Sub
'*** Fehlerbehandlung
Fehler: Application.EnableEvents = True
MsgBox "Fehler: " & Err.Number & vbLf & Err.Description
End Sub
Änderungsdat Zelle in Nachbarzelle speichern - gelöst! Danke
26.12.2023 14:25:52
Christoph B.
@Piet, hary, Thorsten, Ralf
Vielen Dank für eure Bemühungen insbesondere an den Feiertagen!

@Piet
Deine Lösung erfüllt alle meine Vorstellungen von der Funktionalität. Ich werde sie künftig in der Tabelle nutzen, um dem Erfasser die Arbeit zu erleichtern.

Ich bin froh, mich hier angemeldet zu haben. Tolle Community! Macht weiter so. Vllt kann ich auch mal einen sinnvollen Beitrag leisten :)

Gruß!

Christoph B.
(falls ich irgendwas noch machen muss, um den Beitrag aus den aktuellen "zu entfernen", schreibts mir bitte oder @admin, verchieb es bitte.)
AW: Na ja....
26.12.2023 07:43:54
hary
Moin
Piet hat dir ja auch eine Loesung geschrieben. Nur halt ohne Schleife(braucht es auch eigentlich nicht) und Pruefung ob ein Datum eingetragen wird.
Auch die Abfrage auf Target.Row ist bei dir wichtig.
Ansonsten macht mein geaenderter Code(in der Bsp.-mappe) es genau wie gewollt.
Eintragen kann in SpalteH / Datum in SpalteI ist nicht veraenderbar.



Erfassung
 HI
1001.12.2023'26.12.2023
1120.12.2023'26.12.2023

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip' >http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://Hajo-Excel.de/tools.htm' >http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit

gruss hary
AW: wenn erledigt,muss ja nich weiter offen markiert sein...owT
25.12.2023 10:52:04
Christoph B.
Ist noch nicht so ganz erledigt :)

Warte noch auf die Erklärung für den Fehler, falls hary Lust hat.

Hab übrigens festgestellt, dass das Makro nicht mehr funktioniert, wenn die Spalte I gesperrt ist und er der Schutz eingeschaltet.
Und das was ich vorher hatte unterscheidet sich in der syntax.

Ich schließe den Beitrag spätestens morgen.

Viele Grüße!

Christoph B.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige