2017-05-19 2 views
0

Ich habe versucht, die Formel = Today() auf der Tabelle meiner Datenbank zu verwenden, und wenn ich am nächsten Tag eine neue Zeile einfügen, die ganzen Daten sogar die vorherige Daten wurden durch das Datum des aktuellen Tages ersetzt. Gibt es trotzdem etwas zu verhindern? Oder ist es möglich, mit worksweat_change die Datumsspalte zu aktualisieren, wenn eine neue Zeile eingefügt wurde und die Datumsspalte der neuen Rolle das aktuelle Datum hat und am nächsten Tag, wenn ich sie erneut aktualisiere, wird sie nicht ersetzt? Bitte geben Sie dankVBA Worksheet_change Wenn eine neue Zeile hinzugefügt wurde, fügen Sie das heutige Datum ein

+0

Jedes Mal, wenn Ihr Blatt aktualisiert wird, jede Einzelner Wert wird auf das aktuelle Datum gesetzt, da jede Zeile aktualisiert wird. Sie sollten versuchen, dafür ein Makro zu schreiben, das das gesamte Blatt aktualisiert, aber nur den aktuell hinzugefügten Wert ändert. – Thomas

+0

Noch ein Vorschlag, bevor Sie die neue Zeile am nächsten Tag hinzufügen, warum Sie nicht den Wert des gestrigen Datums einfügen? ** (Einfach Werte kopieren und einfügen) ** Solange dieses Datum nicht geändert werden soll, sollten Sie es aus der Formel '= Today()' retten, um zu verhindern, dass es sich ändert. – Mertinc

+0

Sie erwarten keine Antwort wie drücken ** STRG +; ** -Taste, bist du? –

Antwort

1

ZQ7 genannt werden, diese Antwort ist, wie ich in den Kommentaren erwähnt, findet die = TODAY() Formel Zelle und Paste Es sind Werte für die aktuelle Zelle. Dann können Sie Ihre neue Zeile und führen Sie den Rest des Codes hinzufügen ..

Option Explicit 

Sub prevenddate() 
Dim mert As Range 
Dim wb As Workbook 
Dim ws As Worksheet 

Set wb = ThisWorkbook 
Set ws = wb.Sheets("Sheet1") 
    Cells.Find(What:="=TODAY()", After:= _ 
     ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _ 
     SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
ActiveCell.Copy 
ActiveCell.PasteSpecial xlPasteValues 

End Sub 

Und hier sind die gewünschte Antwort!

Dieser Code unten, zunächst sucht nach =TODAY() Formel in Arbeitsblatt, und wenn das Ergebnis ist das heutige Datum es nichts tun. Aber wenn es anders ist dann das heutige Datum dann tut es einfach Paste Values

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim wb As Workbook 
Dim ws As Worksheet 
Dim myRw As Long, myCl As Long 
Set wb = ThisWorkbook 
Set ws = wb.Sheets("Sheet1") 
On Error GoTo 10 

myRw = ActiveCell.Row 
myCl = ActiveCell.Column 

     ws.Cells.Find(What:="=TODAY()", After:= _ 
     ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _ 
     SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Activate 
    If ActiveCell.Value <> Date Then 

     Cells.Find(What:="=TODAY()", After:= _ 
     ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _ 
     SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Activate 
ActiveCell.Copy 
ActiveCell.PasteSpecial xlPasteValues 
    Else 
End If 
10 
    ws.Cells(myRw, myCl).Offset(-1, 0).Activate 
Application.CutCopyMode = False 
End Sub 
+0

Aber ist es möglich, es in worksheet_change zu ändern, anstatt das Makro manuell zu aktivieren? – ZQ7

+0

Ah, jetzt habe ich verstanden, was du meinst. Aber wann (nach welcher Änderung) möchten Sie, dass das Makro (in welchem ​​Zustand) ausgeführt wird? – Mertinc

+0

Nun, ich wünschte mir ein automatisierteres. Aber es ist in Ordnung, ich denke, Ihr Makro funktioniert genauso gut. Vielen Dank Alter! – ZQ7

0

bitte versuchen Sie diesen Code

Public Function MyToday() As Date 
MyToday = CDate(Now() \ 1) 
End Function 

und sollte wie

MyToday() 
+0

Sie können denselben Effekt wie 'MyToday()' erreichen, indem Sie nur 'Date()' (die VBA-Funktion, die das heutige Datum zurückgibt) sagen, ohne dass eine zusätzliche Funktion benötigt wird. – YowE3K

0

den folgenden Code auf Blatt Modul.

Der Code fügt ein Datum in Spalte A ein, wenn Sie etwas in Spalte B eingeben, beginnend mit Zeile2.

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim r As Long 
On Error GoTo SkipError 
If Target.Column = 2 And Target.Row > 1 Then 
    Application.EnableEvents = False 
    r = Target.Row 
    If Target <> "" Then 
     If Cells(r, "A") = "" Then 
      Cells(r, "A") = Date 
     End If 
    Else 
     Cells(r, "A") = "" 
    End If 
End If 
SkipError: 
Application.EnableEvents = True 
End Sub 
0

Von Determine whether user is adding or deleting rows von breetdj schreibe ich diesen Code. Versuchen Sie es in dem Blatt Modul zu setzen:

Option Explicit 
Private Sub Worksheet_Change(ByVal Target As Range) 
Static LR As Long 
Dim Table as range 
Set Table = Me.ListObjects(1).DataBodyRange 
If LR = 0 Then 
    LR = Table.Rows.Count 
    Exit Sub 
End If 
If Table.Rows.Count < LR Or Table.Cells(Table.Rows.Count, 1) <> "" Then Exit Sub 
Table.Cells(Table.Rows.Count, 1) = Date 
LR = LR + 1 
End Sub 

Change „Listobjects (1)“ mit dem Namen der Tabelle, und ändern Sie die Spaltennummer mit der gewünschten Spalte

Verwandte Themen