worksheet_change: Alter Zelleninhalt?

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Zielscheibe.

    worksheet_change: Alter Zelleninhalt?

    Man kann ja mit der Event-Prozedur worksheet_change(Target) Änderungen am Tabellenblatt abfangen.
    Leider habe ich noch keine einfache Methode gefunden, wie man an den bisherigen Wert der geänderten Zellen kommt. Cool wäre eine Eigenschaft á la .OldValue
    Habe ich aber, wie geschrieben, noch nicht gefunden.

    Deshalb habe ich mir folgendes überlegt:

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. Dim Zelle As Range, Auswahl As Range
    3. Dim NeueWerte As New Collection
    4. Set Auswahl = Selection
    5. For Each Zelle In Target.Cells
    6. NeueWerte.Add Zelle.Value, Zelle.Address
    7. Next Zelle
    8. Application.EnableEvents = False
    9. Application.Undo
    10. For Each Zelle In Target.Cells
    11. If Zelle.Value = "Bild" And NeueWerte(Zelle.Address) <> "Bild" Then
    12. Zelle.Offset(, 1).Value = "'<-- war ein Bild"
    13. End If
    14. Zelle.Value = NeueWerte(Zelle.Address)
    15. Next Zelle
    16. Auswahl.Select
    17. Application.EnableEvents = True
    18. End Sub

    Funktioniert zwar ganz gut, ist aber sehr unperformant.

    Wer hat eine bessere Idee?

    Visual Basic-Quellcode

    1. Dim OldValue(255, 65535) As String
    2. Private Sub Worksheet_Change(ByVal Target As Range)
    3. Dim Zelle As Range
    4. For Each Zelle In Target.Cells
    5. If OldValue(Zelle.Column, Zelle.Row) = "Bild" And Zelle.Value <> "Bild" Then
    6. Zelle.Offset(, 1).Value = "<<war ein Bild"
    7. End If
    8. Next Zelle
    9. End Sub
    10. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    11. Dim Zelle As Range
    12. For Each Zelle In Target.Cells
    13. OldValue(Zelle.Column, Zelle.Row) = Zelle.Value
    14. Next Zelle
    15. End Sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!