Makro beim Ändern von Excel-Zellen - Excel-Tipps

Inhaltsverzeichnis

Mehrere Leser haben Fragen gestellt, bei denen Excel jedes Mal, wenn sich ein Wert in der Excel-Tabelle ändert, einen Makroabschnitt ausführen muss.

Erstens verfügt die verbesserte Methode, die nur in XL97: Excel 97 verfügbar ist, über einige neue Ereignishandler, mit denen ein Makro jedes Mal ausgeführt werden kann, wenn sich eine Zelle ändert.

Angenommen, Sie möchten die Zelle daneben immer dann rot formatieren, wenn in Spalte A ein Wert größer als 100 eingegeben wird.

  • Öffnen Sie die Visual Basic-Bearbeitung (Extras> Makro> Visual Basic-Editor).
  • Klicken Sie im linken Fenster mit der rechten Maustaste auf Sheet1 und wählen Sie Code anzeigen.
  • Oben im Dialogfeld Book1 - Sheet1-Code befinden sich zwei Dropdown-Listen. Wählen Sie in der linken Dropdown-Liste Arbeitsblatt aus. Wählen Sie in der rechten Dropdown-Liste Ändern aus.
  • Geben Sie die folgenden Codezeilen ein:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 1 Then ThisRow = Target.Row If Target.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

Jedes Mal, wenn ein Wert in einer Zelle geändert wird, wird dieses Makro ausgeführt. Die Variable Target gibt an, welche Zelle und welcher neue Wert der Zelle vorhanden ist. Überraschenderweise verlangsamt die Verwendung dieser Methode den Prozess nicht wesentlich.

Beachten Sie, dass das Makro so lange aktiv bleibt, wie das Arbeitsblatt geöffnet ist oder bis Sie ein Makro mit der folgenden Zeile ausführen:

Application.EnableEvents = False

/ p> In Excel 95 / 7.0: Sie müssen die OnEntry-Methode verwenden. Sie geben ein Makro an, das ausgeführt werden soll, nachdem ein Wert eingegeben wurde. In diesem Fall enthält die Variable Application.Caller die Adresse und den Wert, die sich geändert haben. Geben Sie in einem neuen Modul Folgendes ein:

Sub AutoOpen() Worksheets("Sheet1").OnEntry = "CheckIt" End Sub Sub CheckIt() If Application.Caller.Column = 1 Then ThisRow = Application.Caller.Row If Application.Caller.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

Die OnEntry-Prüfung bleibt aktiv, bis Sie ein Makro mit dem folgenden Code ausführen:

Worksheets("Sheet1").OnEntry = False

Interessante Beiträge...