Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Makro ausführen wenn Feld geändert wird

VBA Makro ausführen wenn Feld geändert wird
27.11.2013 15:16:03
Tobias
Hallo,
ich bin gerade dabei ein Makro zu erstellen, dass wenn ein Wert in einem Feld geändert wird ein Makro ausgelöst wird.
Folgender Code habe ich schon erstellt:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1")) Is Nothing Then Aktualisieren
If Not Intersect(Target, Range("C5")) Is Nothing Then Aktualisieren
End Sub
Es funktioniert auch soweit, dass wenn im Feld B1 und C5 etwas geändert wird das Makro ausgelöst wird
Nun jedoch meine Frage:
Es soll nicht nur im Feld C5 bei einer Änderung das Makro ausgelöst werden, sondern im Bereich von C5 - C70.
Wie muss hierzu der Code heißen?
Gruß
Tobias

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Makro ausführen wenn Feld geändert wird
27.11.2013 15:22:36
GuentherH
ersetze "C5" duch "C5:C70"
beste Grüße,
Günther

AW: VBA Makro ausführen wenn Feld geändert wird
27.11.2013 15:25:14
Hajo_Zi
Hallo Tobias,
Option Explicit                                     ' Variablendefinition erforderlich
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RaBereich As Range                          ' Variable für Bereich
Dim RaZelle As Range                            ' Variable für Zelle
Set RaBereich = Range("L22:M39, O21:O26")       ' Bereich der Wirksamkeit
' noch mehr Bereiche
'Set RaBereich = Union(Range("C11:AG11 , C13:AG13, C15:AG15 , C17:AG17"), _
'    Range("C35:AE35, C37:AE37, C43:AG43, C45:AG45 , C47:AG47 , C49:AG49"), _
'    Range("C67:AF67 , C69:AF69 , C75:AG75 , C77:AG77 , C79:AG79 , C81:AG81"), _
'    Range("C99:AF99 , C101:AF101, C107:AG107 , C109:AG109 , C111:AG111"), _
'    Range("C127:AG127 , C129:AG129 , C131:AG131 , C133:AG133 , C139:AF139"), _
'    Range("C155:AG155, C157:AG157 , C159:AG159 , C161:AG161 , C163:AG163"), _
'    Range("C179:AF179 , C181:AF181, C187:AG187 , C189:AG189 , C191:AG191"))
Set RaBereich = Intersect(RaBereich, Target)
If Not RaBereich Is Nothing Then
'ActiveSheet.Unprotect ("Passwort")
Aktualisieren
'ActiveSheet.protect ("Passwort")
End If
Set RaBereich = Nothing                         ' Variable leeren
End Sub

Anzeige
AW: VBA Makro ausführen wenn Feld geändert wird
27.11.2013 15:55:52
Tobias
Hallo,
Danke für die schnellen Antworten.
Leider funktioniert es noch nicht.
Ich glaube ich muss es noch genauer erklären:
In dem Bereich C5 - C70 stehen z.B. Automarken, die man über eine DropDown-Liste auswählen kann, wenn nun
die Automarke ausgewählt wird löst es ein Makro aus, das im daneben stehenden Feld (D) eine DropDown-Liste mit den dazugehörigen Modellen anzeigt.
Bsp:
C1: VW
D1: Passat, Polo, Golf,...
C2: Audi
D2: A3, A4, A6,...
Wenn ich nun im Code den Bereich "C5:C70" schreibe, zeigt es mir im Feld D1 zwar die Modelle von VW an und im Feld D2 ebenfalls die Modelle von VW und nicht die von Audi.
Wie muss ich nun den Bereich festlegen, damit immer entsprechend die Modelle zur Automarke angezeigt werden.
Ich hoffe, dass ist verständlich erklärt :)
Danke und Grüße
Tobias

Anzeige
AW: VBA Makro ausführen wenn Feld geändert wird
27.11.2013 16:17:23
Tobias
Hallo,
sorry, mein Fehler.
Ich hab den Fehler erkannt. Er liegt an einer anderen Stelle.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Makro für die automatische Ausführung bei Feldänderungen in Excel


Schritt-für-Schritt-Anleitung

Um ein VBA Makro auszuführen, wenn ein Feld in Excel geändert wird, gehst du folgendermaßen vor:

  1. Öffne das Excel-Dokument und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Suche in der Projektliste links nach dem entsprechenden Arbeitsblatt, in dem das Makro ausgeführt werden soll.

  3. Doppelklicke auf das Arbeitsblatt, um das Code-Fenster zu öffnen.

  4. Füge den folgenden Code ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("B1")) Is Nothing Then
           Aktualisieren
       End If
       If Not Intersect(Target, Range("C5:C70")) Is Nothing Then
           Aktualisieren
       End If
    End Sub
  5. Ersetze Aktualisieren durch den Namen des Makros, das du ausführen möchtest.

  6. Schließe den VBA-Editor und speichere die Änderungen.

Jetzt wird das Makro jedes Mal ausgeführt, wenn eine Änderung in den Zellen B1 oder im Bereich C5 bis C70 vorgenommen wird.


Häufige Fehler und Lösungen

  • Fehler: Das Makro wird nicht ausgelöst.

    • Lösung: Überprüfe, ob die Makros in Excel aktiviert sind. Gehe zu Datei > Optionen > Sicherheitscenter > Einstellungen für das Sicherheitscenter und aktiviere die Makros.
  • Fehler: Das Makro reagiert nicht auf Änderungen in C5:C70.

    • Lösung: Stelle sicher, dass der Bereich korrekt definiert ist. Nutze Range("C5:C70"), um den gesamten Bereich anzusprechen.

Alternative Methoden

Falls du keine VBA-Makros verwenden möchtest, kannst du auch die bedingte Formatierung oder Datenvalidierung in Excel nutzen:

  1. Datenvalidierung: Erstelle Drop-Down-Listen für die Automarken, um die Auswahl zu steuern.
  2. Bedingte Formatierung: Hebe die Zellen hervor, basierend auf den ausgewählten Werten, um visuelles Feedback zu geben.

Diese Methoden erfordern keine Programmierung, können aber in bestimmten Szenarien hilfreich sein.


Praktische Beispiele

Angenommen, du hast eine Tabelle mit Automarken in Spalte C und möchtest, dass in Spalte D die entsprechenden Modelle angezeigt werden. Hier ist ein einfaches Beispiel:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C5:C70")) Is Nothing Then
        Select Case Target.Value
            Case "VW"
                Target.Offset(0, 1).Validation.Delete
                Target.Offset(0, 1).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Passat,Polo,Golf"
            Case "Audi"
                Target.Offset(0, 1).Validation.Delete
                Target.Offset(0, 1).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="A3,A4,A6"
            ' Weitere Automarken hier hinzufügen
        End Select
    End If
End Sub

Das Beispiel zeigt, wie du für jede Automarke die entsprechenden Modelle dynamisch in eine Drop-Down-Liste einfügen kannst.


Tipps für Profis

  • Nutze Application.EnableEvents = False am Anfang deines Codes und Application.EnableEvents = True am Ende, um rekursive Aufrufe zu vermeiden.
  • Verwende Union, um mehrere Bereiche in einem einzigen If-Block zu kombinieren, wenn du mehrere Zellen überwachen musst.
  • Teste deinen Code regelmäßig, um sicherzustellen, dass er unter verschiedenen Bedingungen funktioniert.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Ausführung des Makros verzögern?
Antwort: Du kannst die Funktion Application.Wait Now + TimeValue("00:00:01") verwenden, um das Makro für einen bestimmten Zeitraum anzuhalten.

2. Frage
Kann ich das Makro auf mehrere Blätter anwenden?
Antwort: Ja, du musst den Code in jedes relevante Arbeitsblatt einfügen oder eine allgemeine Subroutine erstellen, die aus jedem Blatt aufgerufen werden kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige