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

Forumthread: Change-Ereignis über Modul steuern

Change-Ereignis über Modul steuern
09.12.2019 15:19:57
Oisse
Hallo Zusammen,
folgendes Problem hätte ich bitte gerne gelöst:
Wenn sich im Tabellenblatt in Spalte 6 etwas ändert, mache das und das. (Das funktioniert einwandfrei)
Wie aber kann ich so eine Änderung per Makro aus einem allgemeinen Modul heraus auslösen?
Hintergrund:
Wenn ich Spalten lösche, soll eine Neuberechnung mit den bereits vorhandenen Werten in der Spalte 6 durchgeführt werden, also über eine Schleife.
Mein bisheriger Code funktioniert leider nicht:

For i = 4 To lz_Vor
With wks_Vorgang
.Range("F" & i).Select
Application.DoubleClick
Application.SendKeys ("{enter}")
End With
Next i

Weder Doppelklick noch Enter löst das Ereignis Change aus, sodass eine Neuberechnung stattfinden würde.
Wie also kann ich das lösen?
Vielen Dank schon mal.
Gruß Oisse
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Change-Ereignis über Modul steuern
09.12.2019 15:47:32
Daniel
HI
da gibt's zwei wege.
a) du schreibst den Code, der im Change-Event laufen soll in ein allgemeines Modul, ggf mit dem TARGET als Übergabeparameter.
dann kannst du dieses Makro entweder über das Change-Event oder aus deinem "normalen" Makro heraus aufrufen
b) man kann auch das Change-Event-Marko direkt aus einem Makros heraus aufrufen, ohne dass das jeweilige Event tatsächlich passieren muss.
hierzu muss man zwei dinge tun:
1. in der ersten Zeile des Event-Makros das "Private" in "Public" ändern
2. beim Aufruf des Makros den Tabellenblattnamen voranstellen. Dies ist notwendig, da jedes Tabellenblatt so ein Eventmakro haben kann und VBA muss ja wissen, welches du meinst.
der Zellbereich für Target muss natürlich übergeben werden.
Beispielcode für b)
im Modul des Tabellenblatts:
Public Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Geändert wurde der Zellbereich: " & Target.Address(0, 0)
End Sub
im allgemeinen Modul
Sub test()
Call Tabelle1.Worksheet_Change(Range("A1"))
End Sub
Gruß Daniel
Anzeige
AW: Change-Ereignis über Modul steuern
09.12.2019 18:52:58
Oisse
Hallo Daniel und vielen Dank für die Hilfe und entschuldige, dass ich mich so spät melde.
Nachdem ich selbst immer und immer wieder noch probiert habe, bin ich auf eine mehr als simple Lösung gekommen, mithilfe des Makrorekorders.
Und die Lösung ist den Wert einfach nochmal neu reinschreiben

For i = 4 To lz_Vor
With wks_Vorgang
.Range("F" & i) = .Range("F" & i)
End With
Next i

Dir noch einen schönen Abend.
Herzlichen Gruß
Oisse
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Change-Ereignis über Modul steuern in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Modul erstellen: Öffne den Visual Basic for Applications (VBA) Editor und erstelle ein neues Modul.
  2. Change-Event definieren: Füge den Code für das Change-Ereignis in das entsprechende Tabellenblatt ein. Ändere Private zu Public, um diesen Code auch aus anderen Modulen aufrufen zu können.
    Public Sub Worksheet_Change(ByVal Target As Range)
       MsgBox "Geändert wurde der Zellbereich: " & Target.Address(0, 0)
    End Sub
  3. Makro im allgemeinen Modul: Erstelle ein weiteres Makro im allgemeinen Modul, um das Change-Event auszulösen.
    Sub test()
       Call Tabelle1.Worksheet_Change(Range("A1"))
    End Sub
  4. Wert neu zuweisen: Um das Change-Ereignis durch eine Neuberechnung auszulösen, kannst du den Wert der Zelle einfach erneut zuweisen:
    For i = 4 To lz_Vor
       With wks_Vorgang
           .Range("F" & i) = .Range("F" & i)
       End With
    Next i

Häufige Fehler und Lösungen

  • Error: Change-Ereignis wird nicht ausgelöst: Stelle sicher, dass das Change-Event in der richtigen Tabelle definiert ist und dass du die Public-Deklaration verwendet hast.
  • Code funktioniert nicht bei Leerzeilen: Überprüfe, ob der Zellbereich, den du an das Change-Event übergibst, korrekt ist. Vermeide Leerzeilen, um unerwartete Fehler zu vermeiden.

Alternative Methoden

Eine alternative Methode besteht darin, das VBA Change-Ereignis direkt über den Makrorekorder zu erstellen. Dies kann dir helfen, den benötigten Code automatisch zu generieren und anzupassen. Du kannst auch eine Schleife verwenden, um mehrere Zellen gleichzeitig zu bearbeiten.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das zeigt, wie du eine Neuberechnung auslösen kannst:

Sub Neuberechnung()
    Dim lz_Vor As Long
    lz_Vor = Cells(Rows.Count, 6).End(xlUp).Row ' Letzte Zeile in Spalte 6
    For i = 4 To lz_Vor
        With wks_Vorgang
            .Range("F" & i) = .Range("F" & i) ' Wert erneut zuweisen
        End With
    Next i
End Sub

Dieses Beispiel zeigt, wie du mit Excel VBA Change-Ereignissen und Schleifen arbeiten kannst, um effizient Daten zu verarbeiten.


Tipps für Profis

  • Debuggen: Nutze die Debugging-Tools in VBA, um festzustellen, wo dein Code möglicherweise nicht funktioniert. Setze Breakpoints, um die Ausführung zu stoppen und Variablen zu überprüfen.
  • Optimierung: Vermeide unnötige Berechnungen, indem du die Application.Calculation-Eigenschaft temporär auf xlCalculationManual setzt, während dein Makro läuft. Vergiss nicht, sie wieder auf xlCalculationAutomatic zu setzen.
Application.Calculation = xlCalculationManual
' Dein Code hier
Application.Calculation = xlCalculationAutomatic

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Change-Ereignis immer funktioniert?
Vergewissere dich, dass der Code in der richtigen Arbeitsmappe und dem richtigen Arbeitsblatt ist. Achte darauf, dass die Public-Deklaration verwendet wird.

2. Was kann ich tun, wenn mein Makro nicht läuft, nachdem ich ein Change-Ereignis ausgelöst habe?
Überprüfe, ob das Change-Ereignis korrekt definiert ist und dass du die richtigen Zellbereiche übergibst. Stelle sicher, dass keine Fehler im VBA-Code vorhanden sind.

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