Ist es möglich, eine Tabelle nach Eintragsänderungsdatum zu sortieren? Wie kann der letzte Änderungszeitpunkt eines Objekts von VBA aus aufgerufen werden?

3935
მამუკა ჯიბლაძე

Ich habe ein MS-Word-Dokument, in dem ich bestimmte Daten in einer sehr langen Tabelle sammle und häufig ändere. Daher möchte ich die Daten nach den letzten Änderungszeiten in den Zeilen sortieren. Wenn ich eine Spalte hinzufüge, in der ich die Änderungszeit von Hand eingebe, würde dies natürlich funktionieren, aber ich möchte dies möglichst vermeiden.

OK, da die Frage mit der Aufforderung zur Konkretisierung zurückgestellt wurde, versuche ich sie entsprechend zu ändern.

Was ich ausdrücklich will (und dann kann ich es selbst machen) ist folgendes:

Da MS Word über Funktionen wie die Änderungsnachverfolgung verfügt, muss der letzte Änderungszeitpunkt jedes geänderten Texts in irgendeiner Form aufgezeichnet werden.

Meine Frage ist dann - wie kann ich aus einem Visual Basic-Makro auf diese Informationen zugreifen? Ich meine etwas wie ThisTable.ThisCell.ModificationTime () oder ThatTable.CurrentRow.LastModificationSessionTime () oder ähnliches.

2
Wenn Sie also ein Element ändern, möchten Sie, dass es an die Spitze der Tabelle verschoben wird. Oder Sie möchten, dass es historisch gemacht wird? Raystafarian vor 9 Jahren 0
@Raystafarian Ich möchte es auf verschiedene Arten sortieren, einschließlich dieser მამუკა ჯიბლაძე vor 9 Jahren 0
Wenn Sie die Einträge nicht mit einem Zeitstempel versehen, mit was möchten Sie dann sortieren? AFAIK, Tabellen werden nicht automatisch aufgezeichnet, wenn jeder Wert eingegeben wird. fixer1234 vor 9 Jahren 0
@ fixer1234 Word verfügt über die Funktion "Änderungen verfolgen" (auf der Registerkarte "Überprüfen"), sodass es definitiv irgendwo aufgezeichnet wird. Die untenstehende Excel-Lösung (mit automatischem Zeitstempel) würde mir trotzdem gefallen, außer dass es sich um eine Datenspalte handelt, während ich mehrere davon habe. მამუკა ჯიბლაძე vor 9 Jahren 0
Ich glaube, dass Änderungen auf der Sitzungsebene funktionieren. Bei einer Sitzung können Sie also mehrere Zeilen erstellen oder ändern und dann das Ergebnis speichern. Alle diese Einträge wären Teil derselben Änderung. Sie hätten keine Basis zum Sortieren nach Zeit innerhalb des Sets. fixer1234 vor 9 Jahren 0
@ fixer1234 Beim Betrachten von Revisionen sehe ich separate Änderungszeiten für Revisionen der einzelnen Textblöcke. Dies ist in Ordnung für mich - wenn ich nach der letzten Sitzung sortieren kann, bei der die Zeile geändert wurde, ist das alles, was ich will მამუკა ჯიბლაძე vor 9 Jahren 0

1 Antwort auf die Frage

2
Gary's Student

Dies ist für ein Excel- Arbeitsblatt. Die Daten werden in Spalte A eingegeben oder geändert . Das Makro gibt automatisch Datum und Uhrzeit in Spalte B ein. Das Makro sortiert dann Spalte A und B nach Spalte B, wobei das neueste Datum oben steht.

Geben Sie das folgende Ereignismakro in den Arbeitsblatt-Codebereich ein:

Private Sub Worksheet_Change(ByVal Target As Range) Dim A As Range Dim AB As Range Set A = Range("A:A") Set AB = Range("A:B")  If Intersect(Target, A) Is Nothing Then Exit Sub If Target.Count > 1 Then Exit Sub Application.EnableEvents = False Target.Offset(0, 1) = Now AB.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Application.EnableEvents = True End Sub 

Da es sich um Arbeitsblattcode handelt, ist es sehr einfach zu installieren und automatisch zu verwenden:

  1. Klicken Sie mit der rechten Maustaste auf den Namen der Registerkarte am unteren Rand des Excel-Fensters
  2. Wählen Sie Code anzeigen, um ein VBE-Fenster aufzurufen
  3. Fügen Sie das Zeug ein und schließen Sie das VBE-Fenster

Wenn Sie Bedenken haben, probieren Sie es zunächst auf einem Testarbeitsblatt.

Wenn Sie die Arbeitsmappe speichern, wird das Makro damit gespeichert. Wenn Sie später als 2003 eine Version von Excel verwenden, müssen Sie die Datei als .xlsm statt als .xlsx speichern

So entfernen Sie das Makro:

  1. Bringen Sie die VBE-Fenster wie oben
  2. Löschen Sie den Code
  3. Schließen Sie das VBE-Fenster

Weitere Informationen zu Makros im Allgemeinen finden Sie unter:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

und

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

Weitere Informationen zu Ereignismakros (Arbeitsblattcode) finden Sie unter:

http://www.mvps.org/dmcritchie/excel/event.htm

Makros müssen aktiviert sein, damit dies funktioniert!

Das ist toll! Und so einfach - ich brauche nicht einmal den Code von "AB.Sort" bis "... = xlSortNormal", da ich es vorziehen würde, ihn nach der Änderungszeit nicht sofort zu sortieren, sondern nur dann, wenn er benötigt wird. Das einzige Problem, das ich nicht lösen kann, ist folgendes: Wenn ich mehrere Spalten habe und auf Änderungen in einer dieser Spalten reagieren möchte, wie kann ich den Code ändern? Ich kann A natürlich durch AE und B durch F ersetzen, aber was soll ich mit dem Teil "Target.Offset (0,1)" tun? მამუკა ჯიბლაძე vor 9 Jahren 0