Discussion:
Zeilen auf anderem Tabellenblatt ausblenden
(zu alt für eine Antwort)
Stefan W
2010-01-29 09:59:50 UTC
Permalink
Hallo!

Ich habe vorab schon hier durchgesucht, aber leider keine passende
Antwort auf mein Problem gefunden.
Ich möchte per Buttonclick auf 2 anderen Tabellenblätter bestimmte
Zeilen ausblenden oder einblenden.


Auf dem Blatt "Tabelle1" befindet sich der Button, der den Code bei
Klick ausführen soll.
Wenn sich auf dem Tabellenblatt "Tabelle 3" in Zelle A1 der Wert "1"
steht soll auf den Tabellenblätter "Tabelle2" und "Tabelle3" jeweils
die Zeile 10 und 12-13 ausgeblendet werden.

Wenn sich auf dem Tabellenblatt "Tabelle 3" in Zelle A1 der Wert "2"
steht soll auf den Tabellenblätter "Tabelle2" und "Tabelle3" jeweils
die Zeile 8 und 10-11 ausgeblendet werden.

Ja nach Wert (1 oder 2) sollen nur die entsprechenden Zeilen
ausgeblendet werden, die anderen sollten dabei immer sichtbar sein.

Für eure Hilfe bin ich sehr dankbar!
Grüße
Andreas Killer
2010-01-29 11:14:40 UTC
Permalink
Post by Stefan W
Ich möchte per Buttonclick auf 2 anderen Tabellenblätter bestimmte
Zeilen ausblenden oder einblenden.
Kein Ding, aber...
Post by Stefan W
Ja nach Wert (1 oder 2) sollen nur die entsprechenden Zeilen
ausgeblendet werden, die anderen sollten dabei immer sichtbar sein.
...wann werden die ausgeblendeten Zeilen wieder eingeblendet? Nie?

Andreas.

Sub Schaltfläche1_BeiKlick()
Select Case Sheets("Tabelle 3").Range("A1")
Case 1
'Wenn sich auf dem Tabellenblatt "Tabelle 3" in Zelle A1 _
der Wert "1" steht soll auf den Tabellenblätter _
"Tabelle2" und "Tabelle3" jeweils die Zeile 10 und 12- _
13 ausgeblendet werden.
Sheets("Tabelle2").Range("A10,A12:A13").EntireRow.Hidden _
= True
Sheets("Tabelle3").Range("A10,A12:A13").EntireRow.Hidden _
= True
Case 2
'Wenn sich auf dem Tabellenblatt "Tabelle 3" in Zelle A1 _
der Wert "2" steht soll auf den Tabellenblätter _
"Tabelle2" und "Tabelle3" jeweils die Zeile 8 und 10- _
11 ausgeblendet werden.
Sheets("Tabelle2").Range("A8,A10:A11").EntireRow.Hidden = _
True
Sheets("Tabelle3").Range("A8,A10:A11").EntireRow.Hidden = _
True
End Select
End Sub
Alexander Wolff
2010-01-29 11:17:23 UTC
Permalink
Post by Stefan W
Auf dem Blatt "Tabelle1" befindet sich der Button, der den Code bei
Klick ausführen soll.
Wenn sich auf dem Tabellenblatt "Tabelle 3" in Zelle A1 der Wert "1"
steht soll auf den Tabellenblätter "Tabelle2" und "Tabelle3" jeweils
die Zeile 10 und 12-13 ausgeblendet werden.
Wenn sich auf dem Tabellenblatt "Tabelle 3" in Zelle A1 der Wert "2"
steht soll auf den Tabellenblätter "Tabelle2" und "Tabelle3" jeweils
die Zeile 8 und 10-11 ausgeblendet werden.
Ja nach Wert (1 oder 2) sollen nur die entsprechenden Zeilen
ausgeblendet werden, die anderen sollten dabei immer sichtbar sein.
Füge ins Modul des Blattes Tabelle3 ein:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
For i = 2 To 3
Sheets("Tabelle" & i).Cells.EntireRow.Hidden = False
If Range("A1") = 1 Or Range("A1") = 2 Then
Sheets("Tabelle" & i).Range( _
(7 + Range("A1") * 1) & ":" & (7 + Range("A1") * 1) & "," & _
(8 + Range("A1") * 2) & ":" & (9 + Range("A1") * 2) _
).EntireRow.Hidden = True
End If
Next
End Sub

Den Button auf Tabelle1 brauchst Du damit nicht!
Bei anderen Werten als 1 oder 2 wird alles angezeigt.
Du könntest Tabelle3!A1 mit Daten Gültigkeit auf 1;2 begrenzen.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Alexander Wolff
2010-01-29 11:30:45 UTC
Permalink
Post by Alexander Wolff
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
For i = 2 To 3
Sheets("Tabelle" & i).Cells.EntireRow.Hidden = False
If Range("A1") = 1 Or Range("A1") = 2 Then
Sheets("Tabelle" & i).Range( _
(7 + Range("A1") * 1) & ":" & (7 + Range("A1") * 1) & "," & _
(8 + Range("A1") * 2) & ":" & (9 + Range("A1") * 2) _
).EntireRow.Hidden = True
End If
Next
End Sub
Den Button auf Tabelle1 brauchst Du damit nicht!
Bei anderen Werten als 1 oder 2 wird alles angezeigt.
Du könntest Tabelle3!A1 mit Daten Gültigkeit auf 1;2 begrenzen.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
a = Range("A1")
For i = 2 To 3
Sheets("Tabelle" & i).Cells.EntireRow.Hidden = False
If a = 1 Or a = 2 Then
Sheets("Tabelle" & i).Range( _
(7 + a) & ":" & (7 + a) & "," & _
(8 + a * 2) & ":" & (9 + a * 2) _
).EntireRow.Hidden = True
End If
Next
End Sub

scheint es etwas zu beschleunigen, denn man soll möglichst wenig auf
Zellinhalte zugreifen.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Stefan W
2010-01-29 14:38:01 UTC
Permalink
Post by Alexander Wolff
Post by Alexander Wolff
Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
 For i = 2 To 3
   Sheets("Tabelle" & i).Cells.EntireRow.Hidden = False
   If Range("A1") = 1 Or Range("A1") = 2 Then
     Sheets("Tabelle" & i).Range( _
       (7 + Range("A1") * 1) & ":" & (7 + Range("A1") * 1) & "," & _
       (8 + Range("A1") * 2) & ":" & (9 + Range("A1") * 2) _
     ).EntireRow.Hidden = True
   End If
 Next
End Sub
Den Button auf Tabelle1 brauchst Du damit nicht!
Bei anderen Werten als 1 oder 2 wird alles angezeigt.
Du könntest Tabelle3!A1 mit Daten Gültigkeit auf 1;2 begrenzen.
Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
  a = Range("A1")
  For i = 2 To 3
    Sheets("Tabelle" & i).Cells.EntireRow.Hidden = False
    If a = 1 Or a = 2 Then
      Sheets("Tabelle" & i).Range( _
        (7 + a) & ":" & (7 + a) & "," & _
        (8 + a * 2) & ":" & (9 + a * 2) _
      ).EntireRow.Hidden = True
    End If
  Next
End Sub
scheint es etwas zu beschleunigen, denn man soll möglichst wenig auf
Zellinhalte zugreifen.
--
Moin+Gruss Alexander - MVP for MS Excel -www.xxcl.de- mso2000sp3 --7-2- Zitierten Text ausblenden -
- Zitierten Text anzeigen -
Hallo!
Vielen Dank für die Hilfe!
Habe mich für die oben zitierte Lösung entschieden, da sie sehr
komfortabel ist (Button entfällt)
Es funktioniert wirklich sehr gut.
Allerdings hab ich noch ein Problem:

Der Wert 1 oder 2 der in A1 steht, wird über die Funktion INDEX
gebildet (ist etwas kompliziert zu erklären)
Jedenfalls wenn ich über INDEX den Wert "1" in A1 schiebe, bekommt
Excel scheinbar nicht mit, dass
sich etwas "changed" und von daher wird der Code auch nicht
ausgeführt?!?!?
Gibt es da Abhilfe?
Alexander Wolff
2010-01-29 22:55:35 UTC
Permalink
Post by Stefan W
Der Wert 1 oder 2 der in A1 steht, wird über die Funktion INDEX
gebildet (ist etwas kompliziert zu erklären)
Jedenfalls wenn ich über INDEX den Wert "1" in A1 schiebe, bekommt
Excel scheinbar nicht mit, dass
sich etwas "changed" und von daher wird der Code auch nicht
ausgeführt?!?!?
Gibt es da Abhilfe?
Folgendes funktioniert ohne Target-Auswertung, sondern mit
Vorgänger-Speicherung in der Zelle IV1:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1") = Range("IV1") Then Exit Sub
a = Range("A1")
For i = 2 To 3
Sheets("Tabelle" & i).Cells.EntireRow.Hidden = False
If a = 1 Or a = 2 Then
Sheets("Tabelle" & i).Range( _
(7 + a) & ":" & (7 + a) & "," & _
(8 + a * 2) & ":" & (9 + a * 2) _
).EntireRow.Hidden = True
End If
Next
Range("IV1") = a
End Sub

Zu bemerkende Unzulänglichkeit: Deine Quelle, deren sich INDEX bedient, muss
für das Ereignis auch in diesem Blatt geändert werden, nicht etwa in einem
anderen! Sonst führt nämlich erst eine spätere Änderung in Tabelle3 zu der
Auslösung des Ereignisses.

In manchen Konstellationen musst Du vor der allerersten Verwendung (nicht
jedoch nach erneutem Öffnen der Datei!) zweimal A1 sich ändern lassen. Das
liegt jedoch bei Deiner Aufgabenstellung nicht vor.

Schöner wäre das Handling mit einer Zuweisung an einen Namen, weil damit
keine ungewollten Werte in Tabellen geschrieben werden. Das erscheint jedoch
nicht ganz einfach.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Andreas Killer
2010-02-01 08:15:50 UTC
Permalink
Post by Stefan W
Der Wert 1 oder 2 der in A1 steht, wird über die Funktion INDEX
gebildet (ist etwas kompliziert zu erklären)
Das Change-Ereignis tritt nicht ein, wenn sich Zellen während einer
Neuberechnung verändern. Verwende daher das Calculate-Ereignis, um
eine Neuberechnung des Blattes aufzufangen.

Andreas.

Dim LastValue As Variant

Private Sub Worksheet_Calculate()
If LastValue <> Range("A1") Then
Worksheet_Change Range("A1")
LastValue = Range("A1")
End If
End Sub

Lesen Sie weiter auf narkive:
Suchergebnisse für 'Zeilen auf anderem Tabellenblatt ausblenden' (Fragen und Antworten)
4
Antworten
Excel, Kann ich eine Dropdown liste auf Tabellenblatt 2 erstellen?
gestartet 2010-02-25 01:37:02 UTC
software
Loading...