Hallo,
Meine bisherige Netzsuche war bislang erfolglos des wegen wende ich mich an Euch.
Ich möchte aus Übersichtlichkeitsgründen in meiner Tabelle (hier von Teile 9 bis 850) alle Zeilen der Spalte „Y“ in denen ein Datum eingetragen ist Aus- und ein Einblenden können.
Habe gelesen das so etwas mittels eines Togglebuttons möglich ist.
Die Autofilterfungtion ist hier bei über 50 Spalten
etwas unpraktisch.
Wäre schön wenn jemand für mich eine Lösung hätte.
Vielen Dank schon mal für Eure Mühen und Hilfe.
Benutze Excel 2002 und 2003
Hallo lernfix,
hinterlege folgenden VBA-Code zu dem ToggleButton. Dann sollte es klappen:
Private Sub ToggleButton1_Click()
If ToggleButton1.Value = True Then
For i = 9 To 850
inhalt = Sheets(„Tabelle1“).Cells(i, 25).Value
If inhalt „“ Then Sheets(„Tabelle1“).Cells(i, 25).EntireRow.Hidden = True
Next i
Else
Sheets(„Tabelle1“).Rows(„9:850“).Hidden = False
End If
End Sub
Hallo,
im Prinzip ist das ganz einfach - wenn man etwas mit VBA (Visual Basic for Applications) umgehen, d.h. etwas programmieren kann.
Wie das Ein-/Ausblenden von Zeilen/Spalten funktioniert siehst Du am besten mittels Makromitschnitt: Extras->Makro->Aufzeichnen…,
dann Zeile(n) auswählen, ein-/ausblenden, Aufzeichnung beenden, den Code ansehen und anpassen.
Etwas problematischer ist die Ausführung des Codes: dazu Click in der Menuleiste mit der rechten Maustaste, Visual Basic anclicken, die Werkzeugbox aktivieren und eine OptionBox auf der Tabelle einrichten. Diese mit dem Modul zum Ein-/Ausblenden verknüpfen, dieser wird bei jedem Click auf die Box aktiviert, man muss also hier den Zustand abfragen und entsprechend reagieren.
Alles klar?
Viel Erfolg (übrigens, ich mache keine Codierungen, ich gebe nur Tipps)
Rainer
zwei Buttons (ein und aus) und das jeweilige Makro dahinterlegen:
Sub aus()
Application.ScreenUpdating = False
LR = [F65536].End(xlUp).Row
For i = 1 To LR
Cells(i, 6).Select
If IsDate(ActiveCell) Then
Rows(i).Select
Selection.EntireRow.Hidden = True
End If
Next i
Range(„F1“).Select
Application.ScreenUpdating = True
End Sub
Sub ein()
Application.ScreenUpdating = False
Rows(„1:65000“).Select
Selection.EntireRow.Hidden = False
Range(„F22“).Select
Application.ScreenUpdating = True
End Sub
Bei diesem Problem kann ich dir jetzt leider nicht spontan weiterhelfen. Da müsste ich selber noch ein wenig recherchieren um dieses Problem zu lösen. Leider habe ich dafür jetzt keine Zeit.
die lösungen von natator und jochen würde ich so kombinieren:
Private Sub ToggleButton1_Click()
Application.ScreenUpdating = False
If ToggleButton1.Value = True Then
For i = 9 To 850
If IsDate(Sheets(„Tabelle1“).Cells(i, 25)) Then Sheets(„Tabelle1“).Cells(i, 25).EntireRow.Hidden = True
Next i
Else
Sheets(„Tabelle1“).Rows(„9:850“).Hidden = False
End If
Application.ScreenUpdating = True
End Sub
im Projektfenster(links) --> rechte Maustaste -> Einfügen -> Userform
Im Eigenschaftsfenster (links) (Name): „frmSteuerung“
Auf dem Formular zwei Buttons anlegen
Button 1 im Eigenschaftsfenster(links!) umbenennen (Name) „cmbEinblenden“
zweiter Button mit namen „cmbAusblenden“
Beide Buttons beschriften mit Ein- bzw Ausblenden
Button cmbEinblenden doppelt anklicken und dann den Code rein:
Private Sub cmbEinblenden_Click()
Dim i As Integer
Application.ScreenUpdating = False
For i = 9 To 850
Cells(i, 25).EntireRow.Hidden = False
Next i
Me.Hide
Application.ScreenUpdating = True
End Sub
und dann doppelt den zweiten cmbAusblenden anklicken und den code rein
Private Sub cmbAusblenden_Click()
Dim i As Integer
Application.ScreenUpdating = False
For i = 9 To 850
If IsDate(Cells(i, 25).Value) Then
Cells(i, 25).EntireRow.Hidden = True
Else
Cells(i, 25).EntireRow.Hidden = False
End If
Next i
Me.Hide
Application.ScreenUpdating = True
End Sub
Dann rechte Maustaste auf Projektfenster -> Einfügen -> „Modul“
folgenden Code rein
Sub Formular_anzeigen()
frmSteuerung.Show
End Sub
dann kann man über Makros aus dem Excel das Makro „Formular_anzeigen“ finden.
Wenn man das startet, dann geht das Formular auf.
Wenn du noch fragen hast, schreib zurück, wenn nicht und es funktioniert, dann bitte ich trotzdem um eine kleine antwort
Ein kleines VBA-Script in Excel-2003.
Gilt nur für 1.Zeile, ist aber ausbaufähig z.B. mit einer Schleife FOR/NEXT.
’ In Zeile 1 steht in Spalte Y ein Datum
’ Dieses wird erkannt und die ganze Zeile ausgeblendet
Sub Datumstest()
If Cells(1, 25) > 0 Then
Selection.EntireRow.Hidden = True
End If
End Sub
Vielen Dank,
Deine Lösung war die schnellste, wobei sich schnell insbesondere auf den Ablauf bezieht. Kein langes rödeln der Liste.
Perfekt!!!
Ich habe den Button nun Ausblenden genannt.
Geht das, dass sich der Butten nach dem anklicken und dem Ausblenden der nicht benötigten Daten in Einblenden umbenennt.
Wenn ja, wäre das natürlich das i-Tüpfelchen oben drauf.
Viele Grüße und nochmals vielen Dank für deine rasche Hilfe
Das ist wohl eher ein Problem der richtigen Webseite bzw. die gefundenen Lösungsansätze genau auf deine Bedürfnisse umzuschreiben.
Habe gelesen das so etwas mittels eines Togglebuttons möglich
ist.
Der Togglebutton als solches macht garnichts. Entscheidend ist das Makro das mit dem Togglebutton verknüpft ist.
Die Autofilterfungtion ist hier bei über 50 Spalten
etwas unpraktisch.
Wieso ist die Autofilterfunktion unpraktisch?
Eigentlich ist sie für so etwas ideal. Man muss halt damit umgehen können.
Ich gehe bei meiner Lösung davon aus, dass
du die Autofilterfunktion normalerweise nicht nutzt
in Spalte Y ab Zeile 9 in den Zellen entweder ein Datum oder nichts steht.
Das Makro schaltet den Autofilter ab oder erstellt nur für die Spalte Y
Den Togglebutton aus den Active-X-Steuerelementen fügst du an der gewünsten Position im Tabellenblatt ein. Dann auf den Button Doppelklicken, damit das Grundgerüst (1. und letzte Zeile des Makros) angelegt wird. Dann den nachfolgenden Code ohne die „Private Sub ToggleButton1_Click()“ und „End Sub“ Zeile in dein Makro kopieren. ggf. muss du noch den Namen des Togglebuttons im Code anpassen.
Der von mir unter Excel 2007 erstellte Code sollte auch unter Excel 2003 funktionieren.
Gruß
Franz
'Erstellt unter Excel 2007
'Code unter dem Tabellen-Modul mit dem Toggle-Button
Private Sub ToggleButton1\_Click()
Dim wks As Worksheet, Zeile\_L As Long
Const ZeileTitel As Long = 8 'Zeile mit Spaltentiteln
Const Spalte\_Filter As Long = 25 'Spalte Y
Set wks = Me
With wks
'Alle Daten einblenden unf ggf. Autofilter abschalten
If .AutoFilterMode = True Then
If .FilterMode = True Then
.ShowAllData
End If
.AutoFilterMode = False
End If
If Me.ToggleButton1.Value = True Then
Zeile\_L = Application.WorksheetFunction.Max(ZeileTitel, \_
.Cells.SpecialCells(xlCellTypeLastCell).Row)
If Zeile\_L \> ZeileTitel Then
'Leere Zeilen in Filter-Spalte ausblenden
.Range(.Cells(ZeileTitel, Spalte\_Filter), .Cells(Zeile\_L, Spalte\_Filter)).AutoFilter \_
Field:=1, Criteria1:=""
End If
Me.ToggleButton1.Caption = "Filter AUS"
Else
Me.ToggleButton1.Caption = "Filter EIN"
End If
End With
End Sub
Private Sub ToggleButton1_Click()
Application.ScreenUpdating = False
If ToggleButton1.Value = True Then
For i = 9 To 850
If IsDate(Sheets(„Tabelle1“).Cells(i, 25)) Then Sheets(„Tabelle1“).Cells(i, 25).EntireRow.Hidden = True
Next i
ToggleButton1.Caption = „Einblenden“
Else
Sheets(„Tabelle1“).Rows(„9:850“).Hidden = False
ToggleButton1.Caption = „Ausblenden“
End If
Application.ScreenUpdating = True
End Sub
hier mein Lösungsvorschlag (der erste Teil ist für den Toggelbutton, der zeite Teil blendet aus):
Private Sub ToggleButton1_Click()
'ist der Button gedrückt?
If ToggleButton1 = True Then
'wenn ja starte ausblenden der Zeilen mit Datum in Spalte „Y“
Call ausblenden
Exit Sub
'ist der Button nicht gedrückt zeige alle Zeilen
Else
'Bereich mit Daten markieren
ActiveSheet.UsedRange.Select
'alle Zeilen einblenden
Selection.EntireRow.Hidden = False
'Markierung auf aktuelle Zelle beschränken
ActiveCell.Select
End If
End Sub
Sub ausblenden()
Dim letzte As Integer
Dim Dat As Variant
Dim i As Integer
'letzte verwendete Zeile in Spalte „Y“ ermitteln
letzte = ActiveSheet.cells(Rows.Count, 25).End(xlUp).Row
For i = 4 To letzte
'in Variable Inhalt der ersten Zelle der Splate Y laden
Dat = cells(i, 19).Value
'Ist der Wert ein Datum?
If IsDate(Dat) = True Then
'wenn ja Zeile aktivieren
Rows(i).Activate
'und ausblenden
Selection.EntireRow.Hidden = True
End If
'nächste Zelle auf Datum prüfen
Next i
End Sub
Bitte entschuldige, dass ich mich erst jetzt melde,
war leider sehr lange krank.
Habe seinerzeit einen Mix aus verschiedenen Infos genommmen, nach dem ich jede Einzelne Hilfe ausprobiert hatte. Bin mit dem Ergebnis soweit zufrieden.