Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro automatisch Starten bei Zellveränderung

Forumthread: Makro automatisch Starten bei Zellveränderung

Makro automatisch Starten bei Zellveränderung
09.09.2003 10:27:28
Claudia
Hallo Ihr Profis,

in einem verstecken (ausgebeldeten) Tabellenblatt verändert sich der Wert einer Zelle (F100) abhängig von den Eingaben in anderen Tabellenblättern.

Ich möchte nun, dass sich immer abhängig von dem Wert, welcher in dieser Zelle steht ein bestimmtes Makro automatisch ausgeführt wird. Wenn Wert "1" dann Makro_1, wenn Wert "2" dann Makro_2 usw. bis Wert "7".

Ich habe mich nun in der VBA Hilfe bis zu dem Punkt Ereignisprozedur gelesen - jedoch scheitere ich mit meinen mageren VBA Kenntnissen.

Ich habe auch ein Code Beispiel gefunden, welches mir jedoch nur mäßig weiterhilft, da ich den Wert in Zelle (F100) nicht selber eintrage, sondern dieser sich über eine Formel selber neu errechnet:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$F$100" And Target.Value = 1 Then
Call Makro_1
End If
If Target.Address = "$F$100" And Target.Value = 2 Then
Call Makro_2
End If
'usw.; ggf. mit Select Case arbeiten
End Sub


Wer kann mir bitte, bitte helfen?

Liebsten Gruß,
Claudi
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro automatisch Starten bei Zellveränderung
09.09.2003 11:16:08
Lars
Hallo Claudi,

ich hab mal schnell drüber geschaut. Du hast in Deinem Makro keinen Verweis für das Tabellenblatt. Vielleicht funktioniert es wie unten beschrieben. Habs aber noch nicht getestet.


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = Sheets("Tabelle2").Range("$F$100") And Target.Value = 1 Then
Call Makro_1
End If
If Target.Value = 2 Then
Call Makro_2
End If
End Sub


Viel Erfolg

Lars
Anzeige
AW: Makro automatisch Starten bei Zellveränderung
09.09.2003 13:02:49
Claudia
Hallo Lars,

ich habe deinen Rat befolgt. Mein Code sieht nun so aus:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = Sheets("Parameter").Range("$D$23") And Target.Value = 1 Then
Call falscher_Tag_auf_falscher_Tag
End If
If Target.Address = Sheets("Parameter").Range("$D$23") And Target.Value = 2 Then
End If
If Target.Address = Sheets("Parameter").Range("$D$23") And Target.Value = 3 Then
Call falscher_Tag_auf_gleicher_Tag
End If
If Target.Address = Sheets("Parameter").Range("$D$23") And Target.Value = 4 Then
Call gleicher_Tag_auf_falscher_Tag
End If
End Sub


Es passiert leider gar nichts, bzw. wenn ich die Makros manuell starte, kommt der Laufzeitfehler 13 - siehe mein Feedback auf die Antwort von Christoph.

Was mache ich falsch?

Liebsten Gruß,
Claudi
Anzeige
das war ja schon ganz heiß
09.09.2003 11:21:42
Christoph Dümmen
Glückwunsch Claudi,

da warst Du schon absolut richtig. Dein Makro wird auch funktionieren, wenn da nicht...

... das Makro auch zum Tabellenblatt gehören müßte.
Also:
* ALT+F11
* (Tabelle1) doppelt anklicken
* Jetzt hier den Code einfügen und nicht im normalen Modul
* Voila

Viel Spaß
Christoph
Anzeige
AW: das war ja schon ganz heiß
09.09.2003 12:37:45
Claudia
Hallo Christoph,

scheinbar mache ich noch immer einen Fehler, da das Ganze noch immer nicht automatisch funktioniert.

Mein Code sieht jetzt so aus:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$D$23" And Target.Value = 1 Then '*** ist dan markiert
Call falscher_Tag_auf_falscher_Tag
End If
If Target.Address = "$D$23" And Target.Value = 2 Then
End If
If Target.Address = "$D$23" And Target.Value = 3 Then
Call falscher_Tag_auf_gleicher_Tag
End If
If Target.Address = "$D$23" And Target.Value = 4 Then
Call gleicher_Tag_auf_falscher_Tag
End If
End Sub


Wenn ich die Makros selber starte, bricht es mit der Fehlermeldung "Laufzeitfehler 13" Typen unverträglich ab und die oben gekennzeichnete Zeile ist gelb markiert.

Und Chage ist wirklich der richtige Befehl, um automatisch eine Werteveränderung in der Zelle D22 zu erkennen? In der Hilfe von Excel steht:

Syntax

Private Sub Worksheet_Change(ByVal Ziel As Range)
Ziel   Der geänderte Bereich. Er kann mehr als eine Zelle umfassen.
Anmerkungen
Dieses Ereignis tritt nicht ein, wenn sich Zellen während einer Neuberechnung verändern. Verwenden Sie das Calculate-Ereignis, um eine Neuberechnung des Tabellenblattes aufzufangen.
Ist meine Veränderung der Zelle nicht eine Neuberechnung?
Hilfe, Hilfe.... :-)
Liebsten Gruß,
Claudi

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro automatisch starten bei Zellveränderung


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro automatisch auszuführen, wenn sich der Wert einer Zelle ändert, kannst du die Worksheet_Change-Ereignisprozedur verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11.
  2. Wähle das entsprechende Tabellenblatt:

    • Im Projekt-Explorer auf der linken Seite, doppelklicke auf das Tabellenblatt, in dem das Makro ausgeführt werden soll.
  3. Füge den folgenden Code ein:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
       If Target.Address = "$D$23" Then
           Select Case Target.Value
               Case 1
                   Call falscher_Tag_auf_falscher_Tag
               Case 2
                   ' Hier kannst du ein weiteres Makro aufrufen
               Case 3
                   Call falscher_Tag_auf_gleicher_Tag
               Case 4
                   Call gleicher_Tag_auf_falscher_Tag
           End Select
       End If
    End Sub
  4. Speichere deine Änderungen:

    • Schließe den Editor und speichere die Excel-Datei als Makro-fähige Arbeitsmappe (*.xlsm).
  5. Teste das Makro:

    • Ändere den Wert in Zelle D23 und beobachte, ob das entsprechende Makro ausgeführt wird.

Häufige Fehler und Lösungen

  • Laufzeitfehler 13 - Typen unverträglich:

    • Dieser Fehler tritt häufig auf, wenn der Code auf eine ungültige Datenart zugreift. Stelle sicher, dass die Zelle, auf die du zugreifst, tatsächlich einen Wert hat, der vom Makro verarbeitet werden kann.
  • Makro wird nicht ausgeführt:

    • Überprüfe, ob du den Code im richtigen Tabellenblatt eingefügt hast. Der Code muss im spezifischen Arbeitsblattmodul sein und nicht in einem allgemeinen Modul.
  • Änderungen in Zellen nach Berechnung:

    • Das Worksheet_Change-Ereignis wird nicht ausgelöst, wenn sich Zellen aufgrund einer Neuberechnung ändern. Verwende in diesem Fall das Worksheet_Calculate-Ereignis, um deine Makros auszuführen.

Alternative Methoden

Wenn du andere Ansätze ausprobieren möchtest, um ein Excel-Makro automatisch auszuführen, gibt es folgende Methoden:

  • Worksheet_Calculate-Ereignis:

    Private Sub Worksheet_Calculate()
      If Range("D23").Value = 1 Then
          Call falscher_Tag_auf_falscher_Tag
      End If
    End Sub
  • Ereignisse in einem Modul: Du kannst auch eine separate Subroutine erstellen, die vom Worksheet_Change-Ereignis aufgerufen wird, um den Code sauberer zu halten.


Praktische Beispiele

  • Beispiel für mehrere Zellen:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
      If Not Intersect(Target, Me.Range("D23:E23")) Is Nothing Then
          ' Dein Code hier
      End If
    End Sub
  • Zellen automatisch ausfüllen: Du kannst auch ein Makro erstellen, das Zellen automatisch ausfüllt, basierend auf einer Bedingung:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
      If Target.Address = "$D$23" Then
          If Target.Value = 1 Then
              Me.Range("E23").Value = "Ausfülltext"
          End If
      End If
    End Sub

Tipps für Profis

  • Nutze die Select Case-Struktur, um deinen Code lesbarer zu gestalten, wenn du mit mehreren Bedingungen arbeitest.
  • Füge Fehlerbehandlungsroutinen hinzu, um Laufzeitfehler vorherzusehen und zu handhaben.
  • Dokumentiere deinen Code mit Kommentaren, um die Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Warum wird mein Makro nicht bei jeder Zelländerung ausgeführt?
Das Worksheet_Change-Ereignis wird nur für direkte Benutzeränderungen ausgelöst. Bei Berechnungen oder Änderungen durch Formeln wird es nicht aktiviert.

2. Wie kann ich sicherstellen, dass mein Makro nur für bestimmte Zellen ausgeführt wird?
Verwende die Intersect-Methode, um festzustellen, ob die geänderte Zelle in einem bestimmten Bereich liegt.

3. Kann ich mehrere Makros in einer Änderung zusammenfassen?
Ja, du kannst mehrere Call-Anweisungen in deiner If- oder Select Case-Struktur verwenden, um mehrere Makros auszuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige