Clever-Excel-Forum

Normale Version: Zwei Befehle kombinieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Worksheets("Zusammenfassung").Range("A2")) Is Nothing Then Exit Sub
    Worksheets("Indikatorenkatalog").Range("A27, A38").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("A2").Value = "Präsenzkurs"
    Worksheets("Indikatorenkatalog").Range("A6, A28, A39").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("A2").Value = "Onlinekurs"
End Sub
Code:
If Intersect(Target, Worksheets("Zusammenfassung").Range("B2")) Is Nothing Then Exit Sub
    Worksheets("Indikatorenkatalog").Range("A17").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("B2").Value = "Kurse ohne Theorieanteil"
    Worksheets("Indikatorenkatalog").Range("A16, A40, A67, A68").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("B2").Value = "Kurse mit Theorieanteil"
Liebe Leute

Bin nicht der VBA-Pro - füge jeweils nur Codes ein.
Ich möchte nun die beiden Codes oben kombinieren. Könnt ihr mir helfen?

Es geht darum, dass im Tabellenblatt "Indikatorenkatalog" jeweils Spalten ausgeblendet werden, je nach dem was im Tabellenblatt "Zusammenfassung" mittels Dropdown ausgewählt wird. Und da gibts in der Zelle A2 die Möglichkeit zwischen "Präsenz- und Onlinekurs" auszuwählen und in Zelle 2 zwischen "Kurse ohne Theorieanteil und Kurse mit Theorieanteil".

Herzlichen Dank und Grüsse
mauritius5
Hallöchen,

denke mal über die logischen Konsequenzen nach, not wahr 15

If Intersect(Target, Worksheets("Zusammenfassung").Range("A2")) Is Nothing Then Exit Sub

oder um den Block herum

If Not Intersect(Target, Worksheets("Zusammenfassung").Range("A2")) Is Nothing Then
...
...
End If
Vielen Dank für die Antwort. Ich verstehe den Sinn, schaffe es allerdings noch nicht, den Code korrekt zusammen zu basteln.
Hallöchen,

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Worksheets("Zusammenfassung").Range("A2")) Is Nothing Then
...
...
End If
If Not Intersect(Target, Worksheets("Zusammenfassung").Range("B2")) Is Nothing Then
...
...
End If
End Sub
Klappt irgendwie noch nicht. Wenn ich die Zellen A2:C2 zudem leer lasse, blendet es mir die zuvor ausgeblendeten Zeilen nicht wieder ein.
Kann es sein, dass der Intersect Befehl nicht der ideale ist dafür?

Die drei Codes müssten in einen genommen werden und wenn in A2:C2 nix steht, müssten die entsprechenden Zeilen wieder eingeblendet werden.

Hat mir sonst noch jemand einen Tipp?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Worksheets("Zusammenfassung").Range("A2")) Is Nothing Then Exit Sub
    Worksheets("Indikatorenkatalog").Range("A27, A38").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("A2").Value = "Präsenzkurs"
    Worksheets("Indikatorenkatalog").Range("A6, A28, A39").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("A2").Value = "Onlinekurs"
   
    If Intersect(Target, Worksheets("Zusammenfassung").Range("B2")) Is Nothing Then Exit Sub
    Worksheets("Indikatorenkatalog").Range("A17").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("B2").Value = "Kurse ohne Theorieanteil"
    Worksheets("Indikatorenkatalog").Range("A16, A40, A67, A68").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("B2").Value = "Kurse mit Theorieanteil"
   
    If Intersect(Target, Worksheets("Zusammenfassung").Range("C2")) Is Nothing Then Exit Sub
    Worksheets("Indikatorenkatalog").Range("A17").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("C2").Value = "Ja"
    Worksheets("Indikatorenkatalog").Range("A40, A67").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("C2").Value = "Nein"
   
End Sub
Hi,

Lies dir schauans Beitrag noch Mal durch und verzichte anschließend auf Exit Sub. Mehr noch: merke dir, dass Exit Sub der Teufel in Person ist, wenn auch nur die kleinste Möglichkeit besteht, dass du Mal was ergänzen möchtest.

Viele Grüße
derHöpp
Vom Handy gesendet
Vielen, vielen lieben Dank euch beiden, es hat nun geklappt. Vorerst jedenfalls (daher hatte ich auch das Gefühl, es ginge nicht).
Der Code klappt so schonmal sehr gut. Nur noch eine Sache. Die Befehle sollten sich nicht gegenseitig ersetzen, sondern ergänzen. Die Zeile A40 z.B. kommt in zwei Befehlen vor und sollte auch ausgeblendet werden, wenn nur der eine Befehl das Ausblenden zur Folge hätte.

Versteht ihr, was ich meine?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Worksheets("Zusammenfassung").Range("A2")) Is Nothing Then
    Worksheets("Indikatorenkatalog").Range("A27, A38").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("A2").Value = "Präsenzkurs"
    Worksheets("Indikatorenkatalog").Range("A6, A28, A39").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("A2").Value = "Onlinekurs"
    End If
    If Not Intersect(Target, Worksheets("Zusammenfassung").Range("B2")) Is Nothing Then
    Worksheets("Indikatorenkatalog").Range("A17").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("B2").Value = "Kurse ohne Theorieanteil"
    Worksheets("Indikatorenkatalog").Range("A5, A16, A27, A40, A67, A68").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("B2").Value = "Kurse mit Theorieanteil"
    End If
    If Not Intersect(Target, Worksheets("Zusammenfassung").Range("C2")) Is Nothing Then
    Worksheets("Indikatorenkatalog").Range("A17").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("C2").Value = "Ja"
    Worksheets("Indikatorenkatalog").Range("A40, A67").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("C2").Value = "Nein"
    End If
End Sub
Code:
'Befehl 1'
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Worksheets("Zusammenfassung").Range("A2")) Is Nothing Then
    Worksheets("Indikatorenkatalog").Range("A27, A38").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("A2").Value = "Präsenzkurs"
    Worksheets("Indikatorenkatalog").Range("A6, A28, A39").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("A2").Value = "Onlinekurs"
Code:
'Befehl 2' 
  If Not Intersect(Target, Worksheets("Zusammenfassung").Range("B2")) Is Nothing Then
    Worksheets("Indikatorenkatalog").Range("A17").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("B2").Value = "Kurse ohne Theorieanteil"
    Worksheets("Indikatorenkatalog").Range("A5, A16, A27, A40, A67, A68").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("B2").Value = "Kurse mit Theorieanteil"
Code:
'Befehl 3'
    If Not Intersect(Target, Worksheets("Zusammenfassung").Range("C2")) Is Nothing Then
    Worksheets("Indikatorenkatalog").Range("A17").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("C2").Value = "Ja"
    Worksheets("Indikatorenkatalog").Range("A40, A67").EntireRow.Hidden = Worksheets("Zusammenfassung").Range("C2").Value = "Nein"

Liebe Leute


Ich stehe bei diesem Problem leider noch immer an. Ich habe diese drei Befehle oben, welche ich gerne kombinieren würde. Je nach dem, was ich im Tabellenblatt "Zusammenfassung" anwähle, blendet es mir im Tabellenblatt "Indikatorenkatalog" andere Dinge aus.

Im Tabellenblatt "Zusammenfassung" habe ich die Zellen A2:C2, in denen ich mittels Dropdown jeweils zwei Möglichkeiten gegeben habe (siehe Codes oben). Nun habe ich im Tabellenblatt "Indikatorenkatalog" allerdings Zeilen, die z.B. sowohl beim Befehl 2 und Befehl 3 ausgeblendet werden können (wie die Zeile A17). Wenn die Zeile A17 also bei einem der beiden Befehle ausgeblendet werden sollte, soll dies auch so passieren (unabhängig davon, was beim anderen Befehl gemacht würde.

Ich schaffe es also nicht, die Befehle zu kombinieren, so dass mit den Dropdowns in den Zellen A2:C2 gearbeitet werden kann. Zeilen, die gemäss Dropdown NICHT ausgeblendet werden sollen, sollten bei Änderung des Dropdowns natürlich wieder erscheinen.

Eine Beispieldatei angehängt.

Kann mir jemand helfen?

Herzliche Grüsse
mauritius5
Hallöchen,

also, erst nochmal etwas Theorie.

Wenn Du alle 3 Zellen nacheinander prüfen willst und dann auch schlimmstenfalls alle 3 Aktionen ausführen, dann passt es mit 3 unabhängigen Prüfungen, also 3x

Code:
If Prüfung 1 Then
  'Aktion 1 ...
End If
If Prüfung 2 Then
  'Aktion 2 ...
End If
If Prüfung 3 Then
  'Aktion 3 ...
End If
Wenn Du aber nach dem ersten Treffer keine weiteren Prüfungen durchführen willst, dann z.B.. mit der Kuh Else Smile

Also, ernsthaft sähe es etwa so aus:

Code:
If Prüfung 1 Then
  'Aktion 1 ...
ElseIf Prüfung 2 Then
  'Aktion 2 ...
ElseIf Prüfung 3 Then
  'Aktion 3
End If
Und dann wäre noch die Variante, dass die Folgeprüfungen nur dann durchgeführt werden, wenn die vorhergehenden wahr sind

Code:
If Prüfung 1 Then
  'Aktion 1 ...
  If Prüfung 2 Then
    'Aktion 2 ...
    If Prüfung 3 Then
      'Aktion 3
    End If
  End If
End If
Herzlichen Dank.

Klappt leider noch nicht. Wenn ich den Inhalt einer Zelle von A2:C2 lösche, blendet es mir die entsprechende Zeile nicht wieder ein. Des Weiteren blendet es mir z.B. die Zeile A17 nicht aus, wenn von den Zellen B2:C2 nur eine die Zeile A17 ausblenden würde (so wie der Code jetzt steht, müssen B2 UND C2 zutreffen).

Ich möchte also, dass alle Prüfungen durchgeführt werden, unabhängig davon, was die vorherige Prüfung ergab. Wenn eine vorherige Prüfung allerdings eine Zeile bereits ausgeblendet hat, sollte dies auch so bleiben. Ausser, die Dropdwons in A2:C2 stehen so, dass diese Zeile in keiner der Dropdowns ausgeblendet wird.

Ich denke also, dass es Variante 1 oder 3 sein sollte. Mit beiden komme ich allerdings nicht zum gewünschten Ergebnis. Irgendwas mache ich also noch falsch...
Seiten: 1 2