2016-08-18 2 views
0

Ich habe einen Datenbereich, an den ich Daten anhängen möchte, wenn ein Benutzer nur Daten in eine der Spalten in der letzten Zeile eingibt. Wenn also 4 Datenzeilen vorhanden sind und der Benutzer in einer der gültigen Spalten (B: L) in der fünften Zeile etwas eingegeben hat, wird das Datum in die Zeile "M" eingefügt, um das Datum der Eingabe zu markieren.Excel VBA Formel/Datum zur letzten Zeile in einem Blatt hinzufügen, wenn Daten eingegeben werden

Gibt es eine Möglichkeit, dies einfach zu tun? Ich könnte mir eine einfache Möglichkeit vorstellen, eine sub hinzuzufügen, die im Grunde sagt, wenn Daten in irgendeiner Spalte B: L -> Datum hinzufügen, aber ich würde dies jedes Mal aufrufen müssen, wenn ein Benutzer das Blatt geändert oder Informationen hinzugefügt hat.

Ich könnte möglicherweise nur eine Formel in jeder Zeile eingeben, aber ich müsste es immer noch aktualisieren, wenn etwas überschrieben oder erweitert wird. Ich frage mich nur, ob jemand eine schnelle Lösung kennt.

Edit:

Eigentlich verwenden,

Sub Worksheet_Change(ByVal Target As Range) 
    Dim lastRow As Long 
    lastRow = GetLastRow(Sheets("MySheet")) 
    If lastRow = 1 Then Exit Sub 
    If Not Intersect(Target, Target.Worksheet.Range("B" & CStr(lastRow) & ":L" & CStr(lastRow))) Is Nothing Then 
     Sheets("MySheet").Range("M" & CStr(lastRow)).value = Date 
    End If 
End Sub 

Wird etwas hinter der letzten Reihe zu der Zeit eingegeben ändert das Blatt geändert wird. Also, wenn Daten in Zeile 6 gehen, und Sie etwas in Zeile 9 eingeben, erkennt es die letzte Zeile als Zeile 9. Ich habe entschieden, das ist eigentlich genug, weil ich leere Zeilen aussortieren werde, aber wenn Sie wollten Ändern Sie einfach die letzte Zeile, Sie könnten einen -Wert verwenden, der als globale Variable beibehalten wird. Überprüfen Sie dann, ob die Untergruppe nur für diesen Wert geändert wurde. Wenn ja, führen Sie Ihren Code aus und ändern Sie dann die oldLastRow in die neue lastRow.

+0

Sie haben Recht, ein Ereignis ausgelöst Unter verwenden. Es gibt kein Problem mit dieser Zündung jedes Mal, wenn ein Benutzer eine Änderung vornimmt. – Kyle

+0

Was ist der beste Weg, dies zu erkennen? Kann ich es auf einen Bereich einstellen, oder müsste es auf dem ganzen Blatt liegen? Ich frage, weil es im Blatt bis zu 60.000 Einträge geben kann. – RWA4ARC

Antwort

1

Wenn ich Ihre Frage richtig verstehe, dann suchen Sie nach dem Worksheet_Change Ereignis Ihres aktuellen Blattes zusammen mit einem Filter, um sicherzustellen, dass ein bestimmter Bereich aktualisiert wurde.

Um dies zu tun, im Editor VBA, gehen auf das Blatt, dass Sie diese Funktionalität wollen, und doppelklicken Sie dann in dem folgenden Code setzen:

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not (Intersect(Target, ActiveSheet.Range("B:L")) Is Nothing) Then 
     ActiveSheet.Range("M" & Target.Row).Value = Now() 
    End If 
End Sub 

Was dies im Grunde sagt, dass, wenn es ist eine Änderung in irgendeiner Weise in den Spalten B bis L, dann setze die aktuelle Zeit in die Spalte M.

Hoffe, das macht den Trick!


Update:

die letzte Zeile in Rechnung zu tragen, wie es in den Kommentaren angegeben:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim LastRow As Long 

    LastRow = ActiveSheet.UsedRange.Rows.Count 

    If Not (Intersect(Target, ActiveSheet.Range("B" & LastRow & ":L" & LastRow)) Is Nothing) Then 
     ActiveSheet.Range("M" & LastRow).Value = Now() 
    End If 
End Sub 
+0

Das ist perfekt und beantwortet meinen Kommentar von oben. Vielen Dank. Es ändert zwar tatsächlich alle Bereiche, was keine große Sache ist, aber ich denke, Sie könnten stattdessen '.Range (" B "& lastRow &": L "& lastRow)' 'aufrufen, um das gleiche Ergebnis wie mein Original zu erhalten Frage. – RWA4ARC

+2

Dies berücksichtigt jedoch nicht die letzte Zeile, und das war eine der Anforderungen. – Kyle

+0

Ja, bemerkte das und editierte meinen Kommentar. – RWA4ARC

Verwandte Themen