Guten Tag,
Ich arbeite an einer Excel-Tabelle, in der ich eine Datentabelle habe. Diese Daten stellen mehrere Kennzahlen dar, die meine Abteilung im Auge behalten möchte. Immer wenn jemand die Tabelle mit neuen Daten füllen möchte, gehen die vorherigen Daten in den Zellen verloren.
Wie kann man ein separates Blatt erstellen, in dem man alle Werte dieser Tabelle automatisch speichern kann? Ich meine, wenn eine Änderung in einer der Tabellenzellen vorgenommen wird, soll der neue Wert automatisch in einer anderen Tabelle gespeichert werden, die alle Werte (alte und neue) der Zellen behält? Ich habe die „Änderungen nachverfolgen“-Funktion ausprobiert, bin mir aber nicht sicher, ob mir diese Methode so gut gefällt.
Kennt jemand einen effizienteren Weg, dies zu tun? Zum Beispiel über ein Makro?
Danke schön!
Antwort1
(Ich bin mobil und kann daher derzeit keine ausführlichere Antwort geben.)
Ich habe genau dafür Code geschrieben. Meine Absicht war, alle Änderungen auf einem kritischen Blatt zu verfolgen, das von mehreren Benutzern bearbeitet wurde. Wenn es einen Streit darüber gäbe, woher die Daten kamen, könnte ich das Protokoll überprüfen. Hier sind VBA-Teile, die sich als nützlich erweisen werden.
Worksheet_Change
Das Ereignis wird jedes Mal ausgelöst, wenn das Arbeitsblatt geändert wird.
If Not Intersect(Target, Range("A1:G12")) Is Nothing
teilt Ihnen mit, ob die geänderte(n) Zelle(n) innerhalb eines für Sie relevanten Bereichs liegen oder nicht.
Es ist schneller, die Werte, die Sie protokollieren möchten, in einem Array zu speichern und dann einen Bereich auf Ihrem Protokollblatt so festzulegen, dass er diesem Array entspricht, als jede Zelle auf dem Protokollblatt einzeln festzulegen.
Versuchen Sie es und sehen Sie, wie weit Sie kommen. Morgen kann ich etwas ausführlicher sein.
Nächster Tag bearbeiten
Hier ist ein Code, der den Bereich auf dem Blatt überwacht, das A1:G12
den Code enthält. Wenn r
die Zeile geändert wurde, kopiert der Code alles Ar:Gr
in ein Blatt, dessenCode Nameist shtLog
. (Der Codename ist der in VBA angezeigte Name, nicht der Name auf der Registerkarte, den Sie in Excel sehen.) Dies sollte Sie in die richtige Richtung bringen.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer
Dim c As Integer
Dim arr(1 To 1, 1 To 12)
If Not Intersect(Target, Range("A1:G12")) Is Nothing Then
r = Target.Row
For c = 1 To 12
arr(1, c) = Cells(r, c).Value
Next
With shtLog
.Range(.Cells(.UsedRange.Rows.Count + 1, 1), .Cells(.UsedRange.Rows.Count + 1, 12)) = arr
End With
End If
End Sub
Antwort2
Die integrierte Funktion „Änderungen nachverfolgen“ ist wahrscheinlich weitaus robuster als jede Änderungsverfolgung, die Sie mit Makros zu implementieren versuchen. Bleiben Sie dabei.
Antwort3
Wir (Haftungsausschluss, ich bin der Gründer) haben ein Prüfpfadsystem für Excel entwickelt (ähnlich wie Google Docs, aber für Excel). Es ist keine freigegebene Arbeitsmappe erforderlich und der Prüfpfad wird in einer lokalen SQL-Datenbank gespeichert, sodass er von jeder Arbeitsmappe aus aufgerufen und als separates Blatt gespeichert werden kann. Schauen Sie sich das an:http://www.officeautomata.com
Antwort4
Mit der Anhängen-Funktion von Sheetgo können Sie einen Verlauf aller Variablenänderungen in Excel speichern. Weitere Informationen finden Sie in diesem Blogbeitrag:https://blog.sheetgo.com/wie-man-mit-sheetgo-Probleme-löst/Änderungen-in-Excel-Dateien-nachverfolgen/(*Haftungsausschluss: Ich bin Mitbegründer von Sheetgo).