News & Tipps zu Microsoft Excel

Lesen Sie hier einige der besten Beiträge aus SmartTools Excel Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Excel.

Beitrag aus SmartTools Excel Weekly

Letzte Tabellenänderung in einem anderen Excel-Tabellenblatt ausgeben

Excel 365 2024 2021 2019 2016 2013

FRAGE Wir nutzen einige wichtige Excel-Tabellen im Team mit mehreren Anwendern. In der täglichen Hektik läuft nicht immer alles optimal und wir müssen jederzeit nachvollziehen können, wer welche Änderung vorgenommen hat. Hilfreich dazu wäre eine Art Protokoll. Ist es zum Beispiel per VBA möglich, den Inhalt der zuletzt bearbeiteten Zelle eines Tabellenblatts automatisch in einem anderen Tabellenblatt auszugeben?

Diverse Anfragen

ANTWORT Machbar ist das mit einem Makro, das automatisch bei Änderungen an einem Tabellenblatt ausgeführt wird. Excel stellt zu diesem Zweck so genannte "Ereignisprozeduren" zur Verfügung. In diesem Fall benötigen Sie die Prozedur "Worksheet_Change".

Das folgende Beispiel geht davon aus, dass Ihre Arbeitsmappe ein Tabellenblatt namens "Kontrollblatt" enthält, in dem Sie in Zelle B5 den Inhalt der Zelle ausgeben lassen wollen, die in einem anderen Tabellenblatt zuletzt bearbeitet worden ist. Außerdem soll in Zelle B4 des Kontrollblatts die Adresse dieser Zelle eingefügt werden.

Gehen Sie wie folgt vor, um die Eingabekontrolle zu realisieren:

  1. Aktivieren Sie das Tabellenblatt, in dem Sie die Eingabe überwachen wollen. Das ist irgendein Tabellenblatt in derselben Arbeitsmappe wie das zu Überwachungszwecken angelegte "Kontrollblatt".
  2. Klicken Sie mit der rechten Maustaste auf das Blattregister der zu überwachenden Tabelle und wählen Sie im Kontextmenü den Befehl Code anzeigen an.
  3. Sie gelangen automatisch in den Visual Basic-Editor, in dem das Codefenster des aktuellen Tabellenblatts geöffnet ist. Am oberen Rand dieses Fensters sehen Sie zwei Dropdownfelder, in denen Sie links den Eintrag "Worksheet" und anschließend rechts den Eintrag "Change" auswählen.
  4. Im Codefenster erscheint daraufhin ein Gerüst für die Ereignisprozedur "Worksheet_Change". Dieses Gerüst ergänzen Sie wie folgt:
Private Sub Worksheet_Change(ByVal Target As Range)
Const AUSGABEBLATT As String = "Kontrollblatt"
Const ZELLE_ADRESSE As String = "B4"
Const ZELLE_INHALT As String = "B5"

Dim wsOutputSheet As Worksheet

  On Error GoTo WsChange_Error
  Application.EnableEvents = False
  Set wsOutputSheet = _
      ThisWorkbook.Worksheets(AUSGABEBLATT)
  With wsOutputSheet
    .Range(ZELLE_ADRESSE).Value = _
        Target.Address
    .Range(ZELLE_INHALT).Value = _
        Target.Value
  End With
WsChange_End:
  Set wsOutputSheet = Nothing
  Application.EnableEvents = True
  Exit Sub
WsChange_Error:
  Debug.Print "Fehler " & Err.Number & _
      ": " & Err.Description
  Resume WsChange_End
End Sub
  1. In den ersten Zeilen der Prozedur werden die Konstanten "AUSGABEBLATT", "ZELLE_ADRESSE" und "ZELLE_INHALT" definiert. Wie oben beschrieben, soll die Ausgabe der letzten Zelländerung im Blatt "Kontrollblatt" erfolgen, wobei die Zelladresse in Zelle "B4" und der Zellinhalt in Zelle "B5" des Kontrollblatts ausgegeben werden sollen. Sie können diese Wertzuweisungen individuell an die Gegebenheiten in Ihrer Arbeitsmappe anpassen. Ändern Sie dazu einfach den Blattnamen und/oder die Adressen der Ausgabezellen.
  2. Verlassen Sie den Visual Basic-Editor per Datei-Schließen und zurück zu Microsoft Excel.

Sobald Sie nun Änderungen an dem Tabellenblatt mit der hinzugefügten Ereignisprozedur vornehmen, erscheinen Adresse und Inhalt der zuletzt geänderten Zelle im Kontrollblatt.