Anzeige
Archiv - Navigation
1844to1848
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code ausführen wenn sich Zellwert ändert

Code ausführen wenn sich Zellwert ändert
03.09.2021 09:09:59
dEllE
Guude an alle,
ich stehe vor einem wahrscheinlich kleinen Problem, zu dem mir aber die verschiedenen Möglichkeiten der VBA Funktionen fehlen:
Einfach erklärt:
Durch Eingabe eines Wertes in genau einer Zelle wird eine Tabelle gefiltert.
Wird dieser Wert aus der Zelle wieder gelöscht, wird auch der Filter zurückgesetzt.
Bisher habe ich es so umgesetzt:

Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Worksheets("20FT").Range("X2")
If WorksheetFunction.CountA(KeyCells) = 1 Then
Sheets("20FT").Select
ActiveSheet.ListObjects("t_20FT").Range.AutoFilter Field:=18, Criteria1:= _
"0", Operator:=xlAnd
Else
If WorksheetFunction.CountA(KeyCells) = 0 Then
Sheets("20FT").Select
ActiveSheet.ListObjects("t_20FT").Range.AutoFilter Field:=18
End If
End If
End Sub
Damit in der Datei keine manuell eingetragenen Werte in den nicht gesperrten Zellen gespeichert werden, leere ich diese Bereiche bei Workbook_BeforeSave.
Das Problem hierbei ist nun, dass der zweite Teil des Codes bei jeder Änderung (also auch bei der Leerung der o.g. Bereiche) anderer Zellen ausgeführt wird, da das ChangeEvent die "Filterzelle" prüft, diese leer ist (also CountA = 0) und demnach der Code ausgeführt wird.
Wie kann ich das ChangeEvent einschränken auf "prüfe nur auf Änderungen in der "FilterZelle"?
Und falls das nicht geht, über welche Alternative könnte ich dieses Problem abfangen?
Vielen Dank für Eure Ideen und
Gruß
dEllE

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code ausführen wenn sich Zellwert ändert
03.09.2021 09:21:58
UweD
Hallo
die Event kurzzeitig ausschalten.
Aber dafür sorge, dass im Fehlerfall auch wieder eingeschaltet wird.
z.B. so

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error GoTo Fehler
Const APPNAME = "Workbook_BeforeSave"
With Application
.EnableEvents = False
'Dein Makro zum Leeren
.EnableEvents = True
End With
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
LG UweD
Anzeige
AW: Code ausführen wenn sich Zellwert ändert
03.09.2021 09:28:59
dEllE
Guude UweD,
danke für diesen Tip. Funktioniert für diesen Fall auch.
Hatte allerdings noch etwas vergessen:
Wenn ich auf den betroffenen Worksheets mit den ChangeEvents in die nicht gesperrten Zellen Daten eintrage, wird der Code ebenfalls bei jeder einzelnen Werteingabe ausgeführt.
Daher wäre eine Methode zur Einschränkung des Prüfbereichs des ChangeEvents (Filterzelle) doch notwendig.
Noch irgendeine andere Idee hierfür?
Gruß dElLE
AW: Code ausführen wenn sich Zellwert ändert
03.09.2021 09:44:11
UweD
Siehe Code von Werner
AW: Code ausführen wenn sich Zellwert ändert
03.09.2021 09:22:24
Werner
Hallo,

Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "X2" Then
If Target = 1 Then
ActiveSheet.ListObjects("t_20FT").Range.AutoFilter Field:=18, Criteria1:= _
"0", Operator:=xlAnd
ElseIf Target = "" Then
ActiveSheet.ListObjects("t_20FT").Range.AutoFilter Field:=18
End If
End If
End Sub
Im Übrigen würde ich in deinem Workbook.BevoreSave Makro vor dem Leeren der Zellen die Events abschalten und danach wieder an.
Also:

Application.Enableevents = False
'Code zum Leeren der Zellen
Application.Enableevents = True
Gruß Werner
Anzeige
AW: Code ausführen wenn sich Zellwert ändert
03.09.2021 09:50:14
dEllE
Suuuuper,
vielen Dank an Euch beide.
Target = 1 muss natürlich durch den CountA = 1 ersetzt werden, da der Filter-Zellinhalt ja immer unterschiedlich ist.
Ich konnte so nun alles eingrenzen, dass man nun "entspannt" damit arbeiten kann.
Schönes Woe!!!
Gruß
dEllE
AW: Code ausführen wenn sich Zellwert ändert
03.09.2021 10:29:54
UweD
Hallo nochmal
Target = 1 muss natürlich durch den CountA = 1 ersetzt werden, da der Filter-Zellinhalt ja immer unterschiedlich ist.

NEIN.

If Target = 1 Then
Bedeutet, dass nur genau die eine Zelle geändert werden soll
Du könntest theoretisch einen Bereich ändern, in dem die eine Zelle enthalten ist und Strg+Enter drücken. Das würde zu einem ungewollten Ergebnis und ggf zu einem Fehler führen.
So wie Werner das gepostet hat ist das schon richtig.
LG UweD
Anzeige
AW: Code ausführen wenn sich Zellwert ändert
03.09.2021 10:36:49
dEllE
Alles klar. Danke für die Erklärung UweD.
Gruß dEllE

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige