Microsoft Excel

Herbers Excel/VBA-Archiv

Ein-/Ausblenden Abhängig

Betrifft: Ein-/Ausblenden Abhängig von: Rolf
Geschrieben am: 23.09.2020 15:18:59

Hallo.
Bisher funktioniert folgende VBA-Anweisung, die im Tabellenblatt („Tabelle5“) hinterlegt ist.
With Sheets("Tabelle6(1)")
.Rows("2:600").EntireRow.Hidden = False
End With
Application.Goto Sheets("Tabelle6(1)").Cells(Cells(11, 6), 1), True

Die Anweisung lautet:
Im Tabellenblatt “Tabelle6(1)” sollen die Zeilen ab Reihe 2 bis Reihe 600 eingeblendet sein.
Dann gehe im Tabellenblatt “Tabelle6(1)” zur Spalte A mit der Zeilennummer, die im aktiven Blatt (=„Tabelle5“) in der Zelle B6 steht.

Nun soll noch folgendes passieren:
Ausgehend von der aktuellen Zelle im Tabellenblatt („Tabelle6(1)“):
Gehe 1 Zelle nach unten. Ab da sollen alle Reihen bis zum Ende ausgeblendet werden.
Bis zum Ende meine ich entweder:
- bis zur Reihe 600
oder
- auswählen eines gesamten Bereichs zusammenhängender Zellen in einer Spalte
Hier gibt’s wohl irgendwie folgenden Code: End(xlDown)

Ich habe hunderte von Anweisungen ausprobiert. Leider ohne Erfolg. Immer nur „Fehlermeldungen“. Das ist nun mal so, wenn man von VBA keine Ahnung hat.
Bitte um Unterstützung.
Rolf

Betrifft: AW: Ein-/Ausblenden Abhängig
von: ChrisL
Geschrieben am: 23.09.2020 15:29:33

Hi Rolf

Worksheets("Tabelle6(1)").Rows(Worksheets("Tabelle5").Range("B6") + 1 & ":600").Hidden = True

oder

With Worksheets("Tabelle6(1)")
.Rows(Worksheets("Tabelle5").Range("B6") + 1 & ":" & .Cells(Rows.Count, 1).End(xlUp).Row).Hidden = True
End With

cu
Chris

Betrifft: Immer nur „Fehlermeldungen“ ...
von: Matthias L
Geschrieben am: 23.09.2020 15:36:37

Hallo,

welche „Fehlermeldungen“ denn?
und wieso Sheets("Tabelle6(1)")
nach der 6 ist doch bestimmt ein Leerzeichen und beim Kopieren wird normalerweise auf (2) erhöht.

wenns nicht hilft, dann lad doch Deine Mappe hier hoch inkl. dem Code der bei Dir zur „Fehlermeldung“ kommt.
Dann schaut sich das jemand an. Ich baue es nicht nach.

Gruß Matthias

Betrifft: AW: Immer nur „Fehlermeldungen“ ...
von: Rolf
Geschrieben am: 23.09.2020 21:45:16

Inzwischen habe ich meine VBA-Anweisung ergänzt, in dem ich
eine Zelle nach unten gehe = ActiveCell.Offset(1, 0).Select
und dann die ganze Zeile/Reihe auswähle = ActiveCell.EntireRow.Select

Jetzt brauche ich nur noch eine ergänzende Anweisung, dass die Auswahl
ab der bereits ausgewählten Zeile/Reihe bis zur Zeile/Reihe 600 erweitert wird.
Im Anschluss könnte man die Auswahl ausblenden mit dem Code:
Selection.EntireRow.Hidden = True

Die Zeile/Reihe ab/von ist unterschiedlich, so dass mir eine feststehender Code, wie zum Beispiel: Sheets("Tabelle6(1)").Rows("22:600").Select nichts nützt.
Der Code müsste sich, wenn es denn überhaupt geht, ungefähr so zusammensetzen:
Sheets("Tabelle6(1)").Rows("ActiveRow:600").Select

Angefügt die Datei, die ich auf das Notwendigste reduziert habe.
Im Makro GeheZU ist nur teilweise zu erkennen, welche untauglichen Versuche ich unternommen habe.
https://www.herber.de/bbs/user/140392.xlsm

Betrifft: Du warst schon auf einen guten Weg ;-)
von: Matthias L
Geschrieben am: 24.09.2020 03:22:58

Hi,

Der Code gehört in ein allgemeines Modul z.B. Modul1 (nicht in die Tabelle)

hier mal ohne das ganze Select-Gedöns
 Sub GeheZu()
 With Sheets("Tabelle6(1)")
 .Rows("2:600").EntireRow.Hidden = False
 End With
 Application.Goto Sheets("Tabelle6(1)").Cells(Cells(11, 6) + 1, 1), True
 Rows(ActiveCell.Row & ":600").EntireRow.Hidden = True
 Application.Goto Cells(1, 1), True
 End Sub
Gruß Matthias

Betrifft: AW: Du warst schon auf einen guten Weg ;-)
von: Rolf
Geschrieben am: 25.09.2020 10:01:31

Hallo Matthias.
Sensationell - Danke. Für Dich mag die Beantwortung kein Problem gewesen sein. Das ist der feine Unterschied zwischen Profi und Laie.
Im Gegensatz zu vielen Antworten lieferst Du sogar das komplette Makro. Toll - Super.
Darf ich Deine Kenntnisse noch etwas strapazieren für folgende Fragen:
1. Ich habe das Makro in ein Modul kopiert. D. h. aber doch, dass ich das Makro nur starten darf, wenn das Tabellenblatt („Tabelle5“) aktiv ist, weil dort der Standort für das Tabellenblatt („Tabelle6(1)“) ausgelesen wird.
Höchst vorsorglich: Gibt’s ne Alternative?
2. Wie würde den die Anweisung lauten, wenn man statt „:600“ es mit „End(xlUp)“ gestalten würde.
3. Du hast am Schluss des Makros hinzugefügt, dass man in der Zelle A1 landet.
Ich würde aber gerne im Tabellenblatt („Tabelle6(1)“) in der Zelle „landen“, die in der „Tabelle5“ ausgelesen wurde.
Für Deine weiteren Mühen schon jetzt vielen Dank.
Rolf

Betrifft: Sprungmarke setzen
von: Peter Kloßek
Geschrieben am: 25.09.2020 18:19:35

Hallo Rolf,



ich habe in Deine Tabelle5 unter B1 eine Formel eingesetzt und das Makro1 erstellt. Durch Betätigen des Buttons müssten nunmehr die richtigen Ergebnisse erscheinen. Bitte mal ausprobieren; Rückmeldung wäre schön.



https://www.herber.de/bbs/user/140444.xlsm




Mit freundlichem Gruß

Peter Kloßek

Betrifft: oh, oh ...
von: Matthias L
Geschrieben am: 25.09.2020 18:56:03

da hab ich extra das Select-Gedöns verbannt und Du baust es wieder ein :-(

Betrifft: einfach Referenzieren . . .
von: Matthias L
Geschrieben am: 25.09.2020 18:28:34

Hallo,

zu: 1.
Ich habe das Makro in ein Modul kopiert. D. h. aber doch, dass ich das Makro nur starten darf, wenn das Tabellenblatt („Tabelle5“) aktiv ist, weil dort der Standort für das Tabellenblatt („Tabelle6(1)“) ausgelesen wird.


Es ist auch durch eine saubere Referenzierung aufs Tabellenblatt
auch aus einem anderen Blatt möglich.
Sub GeheZu()
 With Sheets("Tabelle6(1)")
 .Rows("2:600").EntireRow.Hidden = False
 End With
 Application.Goto Worksheets("Tabelle6(1)").Cells(Worksheets("Tabelle5").Cells(11, 6) +  _
1, 1), True
 Rows(ActiveCell.Row & ":600").EntireRow.Hidden = True
 Application.Goto Cells(1, 1), True
End Sub



zu: 2.
Wie würde den die Anweisung lauten, wenn man statt „:600“ es mit „End(xlUp)“ gestalten würde.


das könnte dann so aussehen:
Sub GeheZu()
Dim LoLetzte& ' & = AS Long

'''''''''''''''''''''''''''
With Worksheets("Tabelle6(1)")
 LoLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
End With

'''''''''''''''''''''''''''''''''''''''''''''''
With Sheets("Tabelle6(1)")
 .Rows("2:" & LoLetzte).EntireRow.Hidden = False
End With
 Application.Goto Worksheets("Tabelle6(1)").Cells(Worksheets("Tabelle5").Cells(11, 6) + 1, 1),  _
True
 Rows(ActiveCell.Row & ":" & LoLetzte).EntireRow.Hidden = True
 Application.Goto Cells(1, 1), True
End Sub



zu: 3.
Du hast am Schluss des Makros hinzugefügt, dass man in der Zelle A1 landet.
Ich würde aber gerne im Tabellenblatt („Tabelle6(1)“) in der Zelle „landen“, die in der „Tabelle5“ ausgelesen wurde.

Application.Goto Cells(Loletzte, 1), True
Ich hoffe ich habe das alles richtig verstanden.



Betrifft: Korrektur zu 2.
von: Matthias L
Geschrieben am: 25.09.2020 19:11:02

einmal With reicht :-)
Sub GeheZu()
Dim LoLetzte& ' & = AS Long
With Worksheets("Tabelle6(1)")
 LoLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
.Rows("2:" & LoLetzte).EntireRow.Hidden = False
 Application.Goto .Cells(Worksheets("Tabelle5").Cells(11, 6) + 1, 1), True
 Rows(ActiveCell.Row & ":" & LoLetzte).EntireRow.Hidden = True
 Application.Goto Cells(1, 1), True
End With
End Sub
Gruß Matthias

Betrifft: einmal GoTo auch ;)
von: ChrisL
Geschrieben am: 25.09.2020 19:18:44

zusätzlich zwei Punkte ergänzt...
Sub GeheZu()
Dim LoLetzte& ' & = AS Long
With Worksheets("Tabelle6(1)")
 LoLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
 .Rows("2:" & LoLetzte).EntireRow.Hidden = False
 .Rows(.Cells(Worksheets("Tabelle5").Cells(11, 6) + 1 & ":" & LoLetzte).EntireRow.Hidden = True
 Application.Goto .Cells(1, 1), True
End With
End Sub


Betrifft: Nöö ... Syntaxfehler ... immer erst prüfen!! owT
von: Matthias L
Geschrieben am: 25.09.2020 19:28:53



Betrifft: AW: Nöö ... Syntaxfehler ... immer erst prüfen!! owT
von: Rolf
Geschrieben am: 27.09.2020 19:10:01

Ich danke Matthias, Peter und Chris, dass sie sich mit meiner Anfrage auseinandersetzt haben. Die Absicht von Matthias, ohne Gedöns zu formulieren, ist eine tolle Sache, da er auch das gesamte Makro einbringt. Der Absicht entgegenstehend, formuliert Peter die Schritte für einen Laien nachvollziehbarer.
Nochmals vielen Dank für Euer mitwirken.
Eine abschließende Frage:
Kann man die Formel:
Rows(ActiveCell.Row & ":600").EntireRow.Hidden = True
Ohne Gedöns umschreiben - etwa so:
Rows(ActiveCell.Row bis End(xlUp)).EntireRow.Hidden = True
bzw. mit der Alternative
Rows(ActiveCell.Row bis End(xlUp) -1).EntireRow.Hidden = True
Bei der Alternative will ich bis zum Ende minus 1 reihe oder auch + 1 Reihe.
Ich danke Euch.
Rolf

Betrifft: AW: Nöö ... Syntaxfehler ... immer erst prüfen!! owT
von: GerdL
Geschrieben am: 27.09.2020 19:26:05

Hallo Rolf!
Range(Cells(ActiveCell.Row, "A"), Cells(Rows.Count, "A").End(xlUp).Offset(-1, 0)).EntireRow.Hidden = True

Gruß Gerd

Betrifft: AW: Nöö ... Syntaxfehler ... immer erst prüfen!! owT
von: ChrisL
Geschrieben am: 28.09.2020 08:55:36

Hi Matthias

Sorry fürs Reinquaken, aber ich konnte nicht nachvollziehen, warum man als Ersatz von Select eine Lösung mit GoTo und ActiveCell.Row wählt.

Mit dem Syntaxfehler hast du recht, da hätte ich besser die Zeile adaptieren sollen, die schon seit ein paar Tagen im Forum steht.
Sub GeheZu()
Dim LoLetzte& ' & = AS Long
With Worksheets("Tabelle6(1)")
    LoLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
    .Rows("2:" & LoLetzte).EntireRow.Hidden = False
    .Rows(Worksheets("Tabelle5").Cells(11, 6) + 1 & ":" & LoLetzte).EntireRow.Hidden = True
    Application.Goto .Cells(1, 1), True
End With
End Sub
cu
Chris

Betrifft: dann musst Du besser alles lesen ...
von: Matthias L
Geschrieben am: 28.09.2020 23:30:03

Hi Chris,

Zitat
... aber ich konnte nicht nachvollziehen, warum man als Ersatz von Select eine Lösung mit GoTo und ActiveCell.Row wählt.

Nun dieses GoTo war von Anfang an im Code vom TE. Das kam nicht von mir.
Wenn man nun schon mal in der Zelle ist kann man auch ActiveCell.Row nutzen.
Auch das wollte der TE so.

Viel weniger nachvollziehbar ist der Registerblattname
Worksheets("Tabelle6(1)"). Das Blatt würde ich nie so nennen.

Aber egal, er hat ja Lösungen erhalten und ist zufrieden.

Gruß Matthias

Beiträge aus dem Excel-Forum zum Thema "Ein-/Ausblenden Abhängig"