Registriert seit: 18.09.2020
Version(en): 2007
16.12.2020, 16:24
(Dieser Beitrag wurde zuletzt bearbeitet: 16.12.2020, 16:25 von ExcelVBAAnfänger.)
Guten Tag zusammen, ich habe leider ein Problem und komme nicht weiter. Im Worksheet Application, habe ich eine Reihe mit Dropdowns (yes oder no) und im Zelle 1D habe ich eine Zelle die mit 1 oder 2 durch ein Kreuzfeld variiert. Im Worksheet Recipe habe ich dann mehrere Tabellen die ein- oder ausgeblendet werden sollen. Beispiel: Im Dropdown wird no ausgewählt und in 1D steht irgendwas: Zeile 10:31 in Recipe ausgeblendet. Im Dropdown wird yes ausgewählt und in 1D steht 1: Zeile 10:31 in Recipe eingeblendet aber 21:31 ausgeblendet Im Dropdown wird yes ausgewählt und in 1D steht 2: Zeile 10:31 in Recipe eingeblendet aber 18:20 ausgeblendet Bisheriger Code der leider nicht funktioniert: Code: Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(18, 3).Value = "no" Then Worksheets("Recipe").Range("10:32").EntireRow.Hidden = True ElseIf Cells(18, 3).Value = "yes" And Cells(1, 4).Value = "2" Then Worksheets("Recipe").Range("18:20").EntireRow.Hidden = True Worksheets("Recipe").Range("21:31").EntireRow.Hidden = False ElseIf Cells(18, 3).Value = "yes" And Cells(1, 4).Value = "1" Then Worksheets("Recipe").Range("18:20").EntireRow.Hidden = False Worksheets("Recipe").Range("21:31").EntireRow.Hidden = True End If
End Sub
Dies ist eine Erweiterung von dieser Aufgabe: alt (auch aus dem Forum hier) Dort war der Finale Code, dieser hier: Code: Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("C18"), Range(Target.Address)) Is Nothing Then Select Case Target.Value Case Is = "yes": Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Case Is = "no": Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = True End Select End If
End Sub
Leider reichen meine Excel Kenntnisse nicht, um die neuen Bedingungen in den alten Code mit einfließen zu lassen, vielleicht kann mir ja hier einer helfen. Schon mal vielen Dank euch Gruß ExcelVBAAnfänger
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, Du kannst die neuen Bedingungen doch zusätzlich in den bisherigen Code einfliessen lassen, im Prinzip z.B. Code: Case Is = "yes" If blabal = "a" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False elseif blabla="b" Then ... else ... end if Case Is = "no" Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = True
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 18.09.2020
Version(en): 2007
16.12.2020, 17:34
(Dieser Beitrag wurde zuletzt bearbeitet: 16.12.2020, 17:34 von ExcelVBAAnfänger.)
Hallo Schauan, erst mal Danke für den Tipp! Mein jetziger Code: Code: Private Sub Worksheet_Change(ByVal Target As Range)
Dim rücksprungBlatt As Worksheet Set rücksprungBlatt = ActiveSheet Worksheets("Applications").Activate Worksheets("Recipe").Activate If Not Application.Intersect(Range("C18"), Range(Target.Address)) Is Nothing Then Select Case Target.Value Case Is = "yes": If Cells(1, 4).Value = "1" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Worksheets("Recipe").Rows("21:31").EntireRow.Hidden = True ElseIf Cells(1, 4).Value = "2" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Worksheets("Recipe").Rows("18:20").EntireRow.Hidden = True End If Case Is = "no": Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = True End Select End If
rücksprungBlatt.Activate End Sub
Der klappt auch soweit gut, bei Recipe verändert sich leider nur was, wenn ich im Dropdown etwas ändere. Wenn ich aber mal eben schnell das Kreuzfeld verändere, passiert leider nichts, hättest du da noch einen Tipp? Gruß ExcelVBAAnfänger
Registriert seit: 18.09.2020
Version(en): 2007
Hat keiner vielleicht ne andere Idee, wie man es umsetzten könnte?
Gruß ExcelVBAAnfänger
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
Du bist dabei vielleicht auf dem falschen Blatt. Wenn Du vor Bereichsangaben nix schreibst, gelten diese für das aktive Blatt. In Deinem Code hast Du unmittelbar nacheinander
Worksheets("Applications").Activate Worksheets("Recipe").Activate
Macht hier sicher keinen Sinn, zuerst Applications zu aktivieren ...
Dann hast Du
If Cells(1, 4).Value = "1" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False
Da Recipe aktiv ist kannst Du Worksheets("Recipe"). weglassen. Falls sich Cells(1, 4).Value auf Applications beziehen soll, musst Du das davor schreiben.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 18.09.2020
Version(en): 2007
18.12.2020, 10:23
(Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2020, 10:23 von ExcelVBAAnfänger.)
Hallo Schauan, ich habe es gerade geändert, sowie du es gesagt hast und es läuft viel flüssiger und besser. Aber das Hauptproblem hat sich leider noch nicht gebessert. Also, wenn ich das Dropdownmenü als erstes benutze und dann das Kreuzfeld benutze passiert nichts. Da anscheinend der VBA Code nur dann benutzt wird, wenn sich das Dropdown verändert. Gruß ExcelVBAAnfänger
Hallo Schauan, ich habe jetzt den Code noch mal von der anderen Seite programmiert und es funktioniert gar nichts mehr, da in der Praxis, als erstes das Dropdown benutzt wird und dann erst das Kreuzfeld. Der Traum ist natürlich, dass egal welches Tool benutzt wird, der VBA Code jedes mal gestartet wird. Code: Private Sub Worksheet_Change(ByVal Target As Range)
Dim rücksprungBlatt As Worksheet Set rücksprungBlatt = ActiveSheet
If Not Application.Intersect(Range("D1"), Range(Target.Address)) Is Nothing Then Select Case Target.Value Case Is = "1": If Worksheets("Applications").Cells(18, 3).Value = "yes" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Worksheets("Recipe").Rows("21:31").EntireRow.Hidden = True ElseIf Worksheets("Applications").Cells(18, 3).Value = "no" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = True End If Case Is = "2": If Worksheets("Applications").Cells(18, 3).Value = "yes" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Worksheets("Recipe").Rows("18:20").EntireRow.Hidden = True ElseIf Worksheets("Applications").Cells(18, 3).Value = "no" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = True End If End Select End If
rücksprungBlatt.Activate End Sub
Gruß ExcelVBAAnfänger
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, ein WorkSheet_Change reagiert auf direkte Änderungen von Zellen, nicht jedoch auf Änderungen, die z.B. durch Formeln berechnet werden. Oben in der AUfgabenstellung schreibst Du von den DropDowns und ID's. Nun kommt noch ein Kreuzfeld ins Spiel ... Eventuell solltest Du nochmal genau beschreiben, bei welcher Aktion was passieren soll. Wenn Dein Kreuzfeld nicht Jakob  sondern ein Kontrollkästchen ist, dann wirkt ein Klicken nicht als Change ... HIer müsstest DU dem Kästchen ein Makro zuweisen. Allerdings wäre dann die Frage, was da für ein Target zutreffen soll ... Eventuell wäre jetzt auch Zeit für eine Beispielmappe, auch wenn ich kein Freund davon bin
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 18.09.2020
Version(en): 2007
21.12.2020, 11:50
(Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2020, 11:50 von ExcelVBAAnfänger.)
Hallo Schauan,
ich versuche es noch mal jetzt ganz genau zu beschreiben :)
Ich hab in der Spalte C von Zeile 18-26, 9 Dropdowns mit der Auswahlmöglichkeit: yes oder no in dem Worksheet Applications. In der Zelle X28-30 habe ich mir ein Kästchen gebaut mit 2 Optionsfelder: 1. Optionsfeld mit X 2. Optionsfeld mit Y Wenn ich auf Optionsfeld X drücke, seht in D1 Applications eine 1, wenn ich auf Optionsfeld Y drücke, steht in D1 eine 2.
Im Worksheet Recipe habe ich Tabellen die entsprechend ein- oder ausgeblendet werden sollen, die Schwierigkeit besteht hier aber jetzt, dass in den jeweiligen Tabellen nicht immer alles ausgeblendet werden soll.
Also nehmen wir jetzt das Beispiel C18 aus Applications. Wenn in der Zelle C18 ein no steht, wird in Recipe Zeile 10-31 komplett alles ausgeblendet. Wenn in der Zelle C18 ein yes steht, können 2 Sachen passieren: Optionsfeld X: soll bei Recipe Zeile 10-31 wieder eingeblendet werden aber Zeile 21-31 ausgeblendet. Optionsfeld Y: soll bei Recipe Zeile 10-31 wieder eingeblendet werden aber Zeile 18:20 ausgeblendet.
Und dann selbe Spiel mit C19 für die Zeilen 33-55 usw..
Mit dem vorherigen Code hat wie gesagt alles schön geklappt, wenn ich in der Reihenfolge Optionsfeld und dann Dropdown betätige. In der Praxis wird aber leider erst das Dropdown betätigt. Und ich hätte es am liebsten so, dass es egal ist, wann ich welches Tool benutze, es soll sich immer direkt bei Veränderung der Tools, ändern.
War das jetzt besser erklärt? Oder soll ich mit der Beispielmappe anfangen?
Gruß ExcelVBAAnfänger
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
wie ich schon schrieb, Du musst das Makro den Optionsfeldern zuweisen. Worksheet_Change geht nicht. Und dabei gibt es dann keinen Target.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 18.09.2020
Version(en): 2007
22.12.2020, 11:08
(Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2020, 11:09 von ExcelVBAAnfänger.)
Hallo zusammen und hallo schaun, wir haben es geschafft! Heute morgen habe ich erst geschnallt, was Schauan mit dem Makro zu den Optionsfeldern zu weisen meint. Also habe ich folgendes gemacht. Diesen Code für das Dropdown gelassen: Code: Private Sub Worksheet_Change(ByVal Target As Range)
Dim rücksprungBlatt As Worksheet Set rücksprungBlatt = ActiveSheet Application.ScreenUpdating = False Worksheets("Applications").Activate Worksheets("Recipe").Activate
If Not Application.Intersect(Range("C18"), Range(Target.Address)) Is Nothing Then Select Case Target.Value Case Is = "yes": If Cells(1, 4).Value = "1" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Worksheets("Recipe").Rows("21:31").EntireRow.Hidden = True ElseIf Cells(1, 4).Value = "2" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Worksheets("Recipe").Rows("18:20").EntireRow.Hidden = True End If Case Is = "no": Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = True End Select End If
Application.ScreenUpdating = True
rücksprungBlatt.Activate
End Sub
Und dann noch extra diesen für Optionsfeld X: Code: Sub Quotation()
If Worksheets("Applications").Cells(18, 3).Value = "yes" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Worksheets("Recipe").Rows("21:31").EntireRow.Hidden = True End If
End Sub
Und noch ein Modul für Optionsfeld Y: Code: Sub OrderConfirmation()
If Worksheets("Applications").Cells(18, 3).Value = "yes" Then Worksheets("Recipe").Rows("10:32").EntireRow.Hidden = False Worksheets("Recipe").Rows("18:20").EntireRow.Hidden = True End If
End Sub
Und es klappt wunderbar. Noch mal vielen Dank Schauan Mit dem Activate, weiß ich, dass es eigentlich unnötig ist und nicht gerne gesehen wird. Aber komischer Weise funktionieren die anderen Programmierungen nicht so flüssig ohne dem. Also habe ich es drinne gelassen. Gruß ExcelVBAAnfänger
|