Automatischer Datumseintrag
#1
Hallo,

ich habe eine Tabelle A1 bis AU5000. Wenn in einer Zeile in dem Bereich Y1 bis AU5000 etwas geändert wird, soll in der entsprechenden Zeile der Spalte A das aktuelle Datum eingetragen werden:

Bsp:

Eintrag in AF734
Automatisch das aktuelle Datum in A734

Ich habe schon folgenden Code mit dem es auch funktioniert:

Allerdings habe ich dann das Problem, dass ich die Eingaben nicht mehr Rückgängig machen kann. Gibt es dafür noch eine andere Lösung?

Viele Grüße

Felix

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Y1:AU5000")) Is Nothing Then
       If Target.Column <> 1 Then
       Cells(Target.Row, 1) = Date
   End If
End If
End Sub
Top
#2
Hallo Felix,

Zitat:Ich habe schon folgenden Code mit dem es auch funktioniert:
Allerdings habe ich dann das Problem, dass ich die Eingaben nicht mehr Rückgängig machen kann. Gibt es dafür noch eine andere Lösung?

In VBA gibt es wirklich kein "zurück", es sei denn, man programmiert das.

1. Änderungen aufzeichnen
2. Bei Bedarf "zurückholen" , sonst verwerfen
Top
#3
hhhmmm. ok. Danke.

Ich bin aber leider ein völliger VBA Neuling und froh, dass ich diesen Code gefunden und hinbekommen habe.... Hast du dafür denn zufällig eine Lösung parat?


Eine weitere Verbesserung wäre, wenn man den Namen des WindowsUsers in die Spalte B hinzufügen könnte.

Habe das mal so probiert, erhalte aber immer Fehlermeldungen. Muss ich denn dabei noch irgendwelche Variablen ändern? Bzw. stimmt das "= User" überhaupt?

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Y1:AU5000")) Is Nothing Then
       If Target.Column <> 2 Then
       Cells(Target.Row, 2) = User
    End If
End If
End Sub
Top
#4
heje excelfreunde,

vielleicht ist die zeile  "Cells(Target.Row, 1) = Date" durch "Cells(Target.Row, 1).value = Date" zu ersetzen...
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Top
#5
(19.04.2016, 13:19)FelixWeb schrieb: Ich bin aber leider ein völliger VBA Neuling und froh, dass ich diesen Code gefunden und hinbekommen habe.... Hast du dafür denn zufällig eine Lösung parat?

Moin, schau einfach einmal hier nach, da steht so einiges zu diesem Thema drin.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#6
Hallo,


es wäre interessant zu wissen, welche Fehlermeldung Du erhältst. Das Einzige was mir auffällt, ist diese Zeile:


Code:
Cells(Target.Row, 2) = User


Der Rest wäre syntaktisch in Ordnung.

Ist User irgendwo als Variable festgelegt? Offensichtlich nicht!

Ungetestet würde ich das empfehlen:


Code:
Cells(Target.Row, 2) = vba.environ("Username")

Es macht aber keinen Sinn, abzufragen, ob target.column <>2  ist, da der Bereich, in dem Target liegen darf, von Spalte 25 bis 51 geht!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#7
Hallo,

Ups, hier ist ja inzwischen mächtig Autobahn gewesen.  :19:

Sorry, ich hatte einen Termin, drum erst jetzt ...

Zitat:Sub Username_Windows()
'Anmeldename unter Windows
  MsgBox Environ("Username")
End Sub

Sub Benutzername_Excel()
'Anmeldename unter Excel
  MsgBox Application.Username
End Sub

Wenn Du die MsgBoxen wegmachst, dann bleibt der Rest der Codezeile für Dein Makro übrig

1. Environ("Username") ... für Windows
2. Application.Username .. für Excel
Top
#8
(19.04.2016, 13:39)radagast schrieb: heje excelfreunde,

vielleicht ist die zeile  "Cells(Target.Row, 1) = Date" durch "Cells(Target.Row, 1).value = Date" zu ersetzen...

Hallo Janosch,

soll das mein Problem mit dem Rückgängig lösen?

Cells(Target.Row, 1) = Date funktioniert ja schon. Wo ist den mit dem .value der Unterschied?
Top
#9
(19.04.2016, 14:31)BoskoBiati schrieb:
Code:
Cells(Target.Row, 2) = vba.environ("Username")

Es macht aber keinen Sinn, abzufragen, ob target.column <>2  ist, da der Bereich, in dem Target liegen darf, von Spalte 25 bis 51 geht!

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Y1:AU5000")) Is Nothing Then
       If Target.Column <> 1 Then
       Cells(Target.Row, 1).Value = Date
   End If
End If
End Sub


Private Sub Worksheet_Change2(ByVal Target As Range)
If Not Intersect(Target, Range("Y1:AU5000")) Is Nothing Then
           Cells(Target.Row, 2).Value = VBA.Environ("Username")
End If
End Sub

Habe das jetzt so gemacht, aber es passiert nichts (auch keine Fehlermeldung)
Top
#10
Hallo,

das zweite Makro ist Quatsch! Es gibt nur die eine Möglichkeit mit 
Code:
Worksheet_Change(



Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Y1:AU5000")) Is Nothing Then
       Cells(Target.Row, 1) = Date
               Cells(Target.Row, 2) = VBA.Environ("Username")
End If
End Sub

Das .Value kannst Du getrost weglassen, das braucht man nur selten!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste