Autor
|
Thema: Zeilen automatisch ausblenden? (15800 mal gelesen)
|
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 Office 2007 W7-SP1
|
erstellt am: 10. Okt. 2012 11:54 <-- editieren / zitieren --> Unities abgeben:
|
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 10. Okt. 2012 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
Ist möglich. Fragt sich, welches Ereignis Du nutzen möchtest, um diesen Automatismus zu bewirken. Change könnte abgefragt werden, was aber hieße, daß der Automatismus von jeder (!) Änderung in der Tabelle angestoßen würde. Bsp. so: Code: Private Sub Worksheet_Change(ByVal Target As Range)
Der Mechanismus könnte ungefähr so aussehen:
Code: Private Sub Worksheet_Change(ByVal Target As Range) Dim Zelle As Range For Each Zelle In Range("Gewünschter Bereich") If Zelle = "Inhalt gut" Then Zelle.EntireRow.Hidden = True If Zelle = "Inhalt weg" Then Zelle.EntireRow.Hidden = False Next End Sub
Die Platzhalter "Gewünschter Bereich", "Inhalt gut" und "Inhalt weg" müssten natürlich noch durch die tatsächlich gewünschten Werte ersetzt werden. Ungetestet!------------------ Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 10. Okt. 2012 13:25 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
|
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 10. Okt. 2012 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
|
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 Office 2007 W7-SP1
|
erstellt am: 10. Okt. 2012 14:46 <-- editieren / zitieren --> Unities abgeben:
Moin! Ja, so ist es gemeint. Ich bitte zu entschuldigen, dass ich die Frage so kurz gehalten habe, aber ich finde kurz und eindeutig eigentlich am besten. Den Code teste ich grad. Die Automatik mit dem Change habe ich noch nicht im Griff. ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 Office 2007 W7-SP1
|
erstellt am: 10. Okt. 2012 15:59 <-- editieren / zitieren --> Unities abgeben:
Leider gelingt es mir nicht, den obigen Code automatisch laufen zu lassen. Ich kann nur "(ByVal Target As Range)" durch "()" ersetzen, dann läuft es auf F5, immerhin, aber das ist ja nur der halbe Spaß. Wie muss ich das einstielen mit der Automatik? ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 10. Okt. 2012 16:47 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
|
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 Office 2007 W7-SP1
|
erstellt am: 10. Okt. 2012 16:55 <-- editieren / zitieren --> Unities abgeben:
Ja, aber es tut ja bei mir bisher überhaupt nichts. Anbei mal meine Testdatei. [A1:A9 soll ggf. ausgeblendet werden. Die Werte darin steuere ich über A11:A19, denn in ausgeblendete Zellen kann man ja nichts direkt eingeben. Auch in der Anwendung, für die ich das benötige, sind die Werte, an denen die Bedingung hängt, Formelergebnisse. Muss Range auf A11:A19 zeigen?] Auch wenn es bremst, würde ich das mit der Automatik gern zumindest ein mal laufen sehen. Wenn es zu sehr bremst, könnte ich die Zellen eingrenzen, in denen Änderungen als Ereignis gelten, oder geht das nicht? Alternativ wäre ich auch zufrieden, wenn ich das bedingte Ein- und Ausblenden mit einem einfachen Klick auf ein selbstgemaches Icon starten könnte - aber auch das krieg ich nicht ohne Hilfe hin. ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! [Diese Nachricht wurde von Doc Snyder am 10. Okt. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 Office 2007 W7-SP1
|
erstellt am: 10. Okt. 2012 17:09 <-- editieren / zitieren --> Unities abgeben:
|
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 11. Okt. 2012 14:53 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
Hi Roland, ich würde die Reaktion auf eine Eingabe in den Zellbereich A11:A19 beschränken, denn der oben gepostete Code wird bei jeder Eingabe in eine beliebige Zelle ausgeführt - was ja nicht sinnvoll weil unnötig ist. Code: Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A11:A19")) Is Nothing Then For Each Target In Target Target.Offset(-10, 1).EntireRow.Hidden = Target = 0 Next Target End If End Sub
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 Office 2007 W7-SP1
|
erstellt am: 11. Okt. 2012 17:15 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Beverly: ...die Reaktion auf eine Eingabe in den Zellbereich A11:A19 beschränken...
Hi! Ja, das wäre sinnvoll, aber das ghet so nur in dem Beispiel. In der Originaldatei kommen die Werte, die die Sichtbarkeit steuern sollen, aus anderen Tabellenblättern und werden dort wiederum aus anderen Dateien bezogen. D.h. die auslösenden Änderungen würden gar nicht durch eine direkte Eingabe auf dem fraglichen Tabellenblatt vorgenommen, sondern nur durch eine Aktualisierung der Zellbezüge. -> Funktioniert dann diese Art der Automatik überhaupt? ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 Office 2007 W7-SP1
|
erstellt am: 11. Okt. 2012 18:48 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Doc Snyder: -> Funktioniert dann diese Art der Automatik überhaupt?
Tja, zumindest bei meinen Versuchen: Nein. Gibt es in dieser Situation noch eine andere Möglichkeit? Ansonsten fände ich es wie gesagt auch praktikabel, das bedingte Aus- und (!) ggf. wieder Einblenden selber anzustoßen. (Wie) kann man dafür eine Schaltfläche einrichten? ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002
|
erstellt am: 11. Okt. 2012 20:34 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
Roland, Private Sub Worksheet_Calculate() ...... End Sub wird aufgerufen, wenn Bezüge zu externen Arbeitsmappen oder anderen Tabellenblättern aktualisiert werden. Manuell geht es recht einfach z.B. mit Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Then ...... End If End Sub wird aufgerufen bei RMB in der Zelle A1. pablo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 12. Okt. 2012 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
|
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 12. Okt. 2012 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
Zitat: Original erstellt von Doc Snyder: -> Funktioniert dann diese Art der Automatik überhaupt?
Nur wenn es sich um eine direkte Eingabe handelt. Verwende stattdessen das Doppelklick-Ereignis (auf eine beliebige Zelle):
Code: Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim rngZelle As Range Cancel = True For Each rngZelle In Range("A1:A10") rngZelle.EntireRow.Hidden = rngZelle = 0 Next rngZelle End Sub
Du kannst auch das Calculate-Ereignis verwenden - das wird aber bei jeder Änderung im Tabellenblatt ausgeführt. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 12. Okt. 2012 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
Zitat: Original erstellt von Doc Snyder: ... Ansonsten fände ich es wie gesagt auch praktikabel, das bedingte Aus- und (!) ggf. wieder Einblenden selber anzustoßen. (Wie) kann man dafür eine Schaltfläche einrichten?
Zitat: Original erstellt von Paulchen: Moin, der "Filter" macht genau das, ohne VBA.
Ggf. ist eine Hilfsspalte erforderlich, die per Formel die auszublendenden Zeilen identifiziert, die dann per Autofilter aus- bzw. eingeblendet werden können. Sicherlich die am einfachsten einzurichtende Lösung. ------------------ Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002
|
erstellt am: 12. Okt. 2012 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
Zitat: Original erstellt von Beverly:
... Du kannst auch das Calculate-Ereignis verwenden - das wird aber bei jeder Änderung im Tabellenblatt ausgeführt.
Das Calculate-Ereignis wird bei Berechnungen im Tabellenblatt ausgeführt, z.B. bei Änderungen von externen Bezügen, Werten in Zellen mit Nachfolgern oder Eingabe von Formeln. Bei Änderungen die keine Neuberechnung hervorrufen muss eine andere Überwachung stattfinden (z.B. Worksheet_Change). pablo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 Office 2007 W7-SP1
|
erstellt am: 12. Okt. 2012 14:36 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von carsten-3m: ...Sicherlich die am einfachsten einzurichtende Lösung.
Ja, das mag sein, aber ich habe das ja auch gleich ausprobiert und finde es voll unpraktisch, weil man sich da jedesmal neu zu der anzuwendenden Bedingung durchklicken muss. ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 12. Okt. 2012 20:18 <-- editieren / zitieren --> Unities abgeben: Nur für Doc Snyder
Zitat: Original erstellt von pablo:
Das Calculate-Ereignis wird bei Berechnungen im Tabellenblatt ausgeführt, z.B. bei Änderungen von externen Bezügen, Werten in Zellen mit Nachfolgern oder Eingabe von Formeln. Bei Änderungen die keine Neuberechnung hervorrufen muss eine andere Überwachung stattfinden (z.B. Worksheet_Change). pablo
Das hatten wir schon, dass das Worksheet_Change Ereignis im konkreten Fall keine Option ist (siehe Beiträge weiter oben), sondern dass sich die 0 aus einer Formel ergibt. Das Calculate Ereignis wird aber auch dann ausgeführt, wenn das Ergebnis nicht 0 ist - darum geht es. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |