Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1820to1824
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

worksheet_change nicht immer ausführen

worksheet_change nicht immer ausführen
26.03.2021 14:30:27
Dennis
Hallo Zusammen,
mit Excel und VBA habe ich mir ein Formular erstellt, bei dem durch die Eingabe von bestimmten Werten in unterschiedliche Zellen Zeile/Passagen vom Formular ein- und ausgeblendet werden können.
Realisiert habe ich das mit "worksheet_change" und unterschiedlichen if, elseif - Abfragen. D.h. pro Zelle zum Ein-/Ausblenden eine If-Bedingung mit dazugehörigen elseIf-Bedingungen. Das Funktioniert auch.
Mein Problem ist, dass "worksheet_change" jedes mal aufgerufen wird, wenn etwas in einer beliebigen anderen Zelle eingetragen wurde.
Aufgrund von 17 if-Abfragen ist hier die Ladezeit relativ lange.
Nun ist meine Frage, ob eine Möglichkeit existiert, "worksheet_change" nur dann auszuführen, wenn die Ein-/Ausblend-Zellen ausgewählt wurden oder ein alternativer Ansatz.
z. B. etwas in Richtung:
Sub Befehl_...(...)
if 1.RelevanteZelle OR ... OR LetzeRelevanteZelle then
worksheet_change
end if
End Sub

Vielen Dank im Voraus!
Dennis

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: worksheet_change nicht immer ausführen
26.03.2021 14:35:01
Werner
Hallo,
eine erste Alternative wäre, dass du hier mal dein Makro zeigst.
Gruß Werner

AW: worksheet_change nicht immer ausführen
26.03.2021 14:44:47
Dennis
Anbei ein Auszug des Codes
Sub Worksheet_Change(ByVal Target As Range)
If Range("C155").Value = "1" Then
Range("157:162").EntireRow.Hidden = False
Range("163:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "2" Then
Range("157:169").EntireRow.Hidden = False
Range("170:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "3" Then
Range("157:176").EntireRow.Hidden = False
Range("177:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "4" Then
Range("157:183").EntireRow.Hidden = False
Range("184:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "5" Then
Range("157:190").EntireRow.Hidden = False
Range("191:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "6" Then
Range("157:197").EntireRow.Hidden = False
Range("198:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "7" Then
Range("157:204").EntireRow.Hidden = False
Range("205:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "8" Then
Range("157:210").EntireRow.Hidden = False
Range("211:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "9" Then
Range("157:218").EntireRow.Hidden = False
Range("219:225").EntireRow.Hidden = True
ElseIf Range("C155").Value = "10" Then
Range("157:225").EntireRow.Hidden = False
Else
Range("156:225").EntireRow.Hidden = True
End If
If Range("C283").Value = "1" Then
Range("285:355").EntireRow.Hidden = False
Range("356:639").EntireRow.Hidden = True
Range("296:315").EntireRow.Hidden = True
Range("330:354").EntireRow.Hidden = True
ElseIf Range("C283").Value = "2" Then
Range("285:426").EntireRow.Hidden = False
Range("427:639").EntireRow.Hidden = True
Range("296:315").EntireRow.Hidden = True
Range("330:354").EntireRow.Hidden = True
Range("367:386").EntireRow.Hidden = True
Range("401:425").EntireRow.Hidden = True
ElseIf Range("C283").Value = "3" Then
Range("285:497").EntireRow.Hidden = False
Range("498:639").EntireRow.Hidden = True
Range("296:315").EntireRow.Hidden = True
Range("330:354").EntireRow.Hidden = True
Range("367:386").EntireRow.Hidden = True
Range("401:425").EntireRow.Hidden = True
Range("438:457").EntireRow.Hidden = True
Range("472:496").EntireRow.Hidden = True
ElseIf Range("c283").Value = "4" Then
Range("498:568").EntireRow.Hidden = False
Range("569:639").EntireRow.Hidden = True
Range("296:315").EntireRow.Hidden = True
Range("330:354").EntireRow.Hidden = True
Range("367:386").EntireRow.Hidden = True
Range("401:425").EntireRow.Hidden = True
Range("438:457").EntireRow.Hidden = True
Range("472:496").EntireRow.Hidden = True
Range("509:528").EntireRow.Hidden = True
Range("543:567").EntireRow.Hidden = True
ElseIf Range("C283").Value = "5" Then
Range("285:639").EntireRow.Hidden = False
Range("296:315").EntireRow.Hidden = True
Range("330:354").EntireRow.Hidden = True
Range("367:386").EntireRow.Hidden = True
Range("401:425").EntireRow.Hidden = True
Range("438:457").EntireRow.Hidden = True
Range("472:496").EntireRow.Hidden = True
Range("509:528").EntireRow.Hidden = True
Range("543:567").EntireRow.Hidden = True
Range("580:599").EntireRow.Hidden = True
Range("614:638").EntireRow.Hidden = True
Else
Range("285:639").EntireRow.Hidden = True
End If
End Sub


Anzeige
AW: worksheet_change nicht immer ausführen
26.03.2021 16:19:18
Hajo_Zi
kürze den code es reicht eine Zeile für die Zeile
Range("157:162").EntireRow.Hidden = Range("C155").Value = "1"
Bild
Homepage

AW: worksheet_change nicht immer ausführen
26.03.2021 16:39:13
Daniel
Hi
das macht man so:
man bildet die Schnittmenge aus Target und den Relevanten Zellen, und wenn das ein Ergebnis bringt, dann führt man das Makro aus, sonst nicht:
Sub Worksheet_Change(ByVal Target As Range)
if not intersect(Target, Range("C155,C283")) is nothing then
und hier dann dein bisheriger Code
end if
end Sub

dann wird der Code im inneren des IFs nur ausgeführt, wenn eine der anführten Zellen geändert wurde
Gruß Daniel

Anzeige
AW: worksheet_change nicht immer ausführen
26.03.2021 21:25:43
Dennis
Hat geklappt :)
Vielen Dank für die Hilfe :)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige