Erkennen, ob Zell-Wert wurde tatsächlich geändert
Worksheet_Change
ausgelöst, wenn der Wert in einer Zelle geändert wird (was ich will), aber es löst auch bei der Eingabe einer Zelle, als ob, um es zu Bearbeiten, aber nicht tatsächlich ändern Sie den Wert der Zelle (und dies ist, was ich nicht wollen, zu passieren).
Sagen, möchte ich hinzufügen Schattierung auf Zellen, deren Wert geändert wurde. Also ich code:
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Interior.ColorIndex = 36
End Sub
Nun zum testen meiner Arbeit: Ändern Sie die Zelle A1 und die Zelle wird hervorgehoben. Das ist das gewünschte Verhalten. So weit So gut. Dann, doppelklicken Sie auf B1, aber nicht ändern Sie den Wert und klicken Sie dann auf C1. Sie werden bemerken, B1 wird hervorgehoben! Und dies ist nicht das gewünschte Verhalten.
Muss ich gehen durch die Methoden, die hier diskutiert, die Erfassung der alte Wert dann vergleichen, alt gegen neu, bevor Hervorhebung der Zelle? Ich hoffe, es ist etwas, was mir fehlt.
Change
- Ereignis ist entworfen, um zu erfassen, wird ein Bearbeiten in der Zelle nicht zu Messen, werden die Daten aus, die Sie Bearbeiten - also ein test zum Vergleich der Ergebnisse einer Bearbeitung der Vorherige Zustand wird außerhalb des direkten Anwendungsbereichs der Change
VeranstaltungSie sind richtig in der Annahme, dass dies scheint merkwürdig zu sein. Ich denke, die Frage kann nur beantwortet werden durch eine spezielle (und komplexen) Ansatz wie in anderen Antworten auf ähnliche Fragen hier ist: "verändert das Verhältnis zu wenn"? Gimp ' s Vorschlag ist in Ordnung, wenn das ist Ihr Ziel - um den überblick über alle änderungen in einer bestimmten Sitzung. Allerdings brauchen Sie für einen weiteren Ansatz verwenden, wenn Sie auf die Strecke wollten (eg) mehrere änderungen in einer bestimmten Sitzung. Worksheet_change nur gibt Sie das Ereignis als ein "Haken" - Sie haben zu bauen (leider manchmal zu viel) auf der Oberseite, die auf Ihre speziellen Bedürfnisse anpassen.
Haben Sie sich überlegt mit dem
Track Changes
Funktion?stackoverflow.com/questions/4668410/...
InformationsquelleAutor user1615488 | 2012-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schlage ich vor, automatisch die Erhaltung eines "Spiegel-Kopie" von Ihr Blatt in ein anderes Blatt, für den Vergleich mit der geänderten Zelle Wert.
@brettdj und @JohnLBevan im wesentlichen vorschlagen, das gleiche zu tun, aber Sie speichern die Zelle Werte in die Kommentare oder eine Wörterbuch-bzw. (- und +1 für diese Ideen in der Tat). Mein Gefühl ist, dass es konzeptionell viel einfacher zu sichern Zellen in Zellen, sondern in anderen Gegenständen (insbesondere Kommentare, die Sie oder die Benutzer, können Sie für andere Zwecke zu verwenden).
So, sagen, ich habe
Sheet1
deren Zellen die der Benutzer ändern kann. Ich habe dieses andere BlattSheet1_Mirror
(das könnten Sie beiWorkbook_Open
und könnte ausgeblendet werden, wenn Sie dies wünschen-bis zu Ihnen). So starten Sie mit, den InhaltSheet1_Mirror
wäre identisch mit derSheet1
(wieder, die Sie durchsetzen könnten diese beiWorkbook_Open
).Jedes mal
Sheet1
'sWorksheet_Change
ausgelöst wird, wird der code überprüft, ob die "veränderte" Zelle Wert inSheet1
ist tatsächlich anders aus, inSheet1_Mirror
. Wenn dem so ist, tut es die Aktion, die Sie möchten, und aktualisiert die Spiegel Blatt. Wenn nicht, dann nichts.Diese sollten Sie auf die richtige Spur:
Ich habe versucht, es ein ein Fehler auf Zeile 5, Wenn r ein.Wert <> Sheet1_Mirror... Laufzeit 424, Objekt erforderlich..
Auch versucht:
Sheets("Sheet1_Mirror").Range(r.Address).Value
keine evailGetestet habe ich diesen code und es funktioniert. Haben Sie versucht, schrittweise durch den code im debug-Modus? Dies wird helfen, Sie erkennen Ihre Fehler. Ist
r
Nichts? Haben Sie ein BlattSheet1_Mirror
? Nur Sie können herausfinden...InformationsquelleAutor Jean-François Corbett
Dieser code verwendet die Kommentare zu speichern, die vor Wert (Bitte beachten Sie wenn Sie brauchen Sie die Kommentare für andere Zwecke mit dieser Methode entfernen zu lassen)
xlNone
Normal-Modul - schalten Sie die Anzeige der Kommentare aus
Blatt code änderungen erfassen
InformationsquelleAutor brettdj
Versuchen, diesen code. Wenn Sie einen Arbeitsbereich eingeben, speichert es die ursprüngliche Zelle Werte in einem dictionary-Objekt. Wenn das Arbeitsblatt ändern wird ausgelöst, es vergleicht die gespeicherten Werte mit den aktuellen Werten und markiert alle änderungen.
NB: um die Effizienz zu verbessern Verweis microsoft scripting runtime & ersetzen Sie die Als Objekt mit Als Scripting.Wörterbuch und die CreateObject("Scripting.Wörterbuch") mit Neue Scripting.Wörterbuch.
ps. jeder vba-code aktualisieren Zellen (auch farbig), Stoppt excel die rückgängig-Funktion arbeiten! Um dies zu umgehen können Sie umprogrammieren, undo-Funktion, aber es kann ziemlich speicherintensiv. Musterlösung: http://www.jkp-ads.com/Articles/UndoWithVBA00.asp /http://www.j-walk.com/ss/excel/tips/tip23.htm
InformationsquelleAutor JohnLBevan
Ich weiß, dies ist ein Alter thread, aber ich hatte genau das gleiche problem, wie dieses "Ändern Sie die Zelle A1 und die Zelle wird hervorgehoben. Das ist, was ich erwarten würde. Doppel-klicken Sie auf B1, aber nicht ändern Sie den Wert und klicken Sie dann auf C1. Sie werden bemerken, B1 wird hervorgehoben! "
Ich wollte nicht, markieren Sie eine Zelle, wenn es nur doubleclicked ohne Wert innerhalb.
Ich gelöst in einfach Weg. Vielleicht hilft es jemanden in Zukunft.
Habe ich nur noch diese auf den Anfang des Ereignisses:
InformationsquelleAutor GohanP