Grüezie Niclaus,
Das wird ja ewig dauern, das Makro für 6658 Spalten laufen zu
lassen.
je nach Code aber grundsätzlich zustimm, Vba ist langsam.
Man müsste für jede Zeile die zuletzt besetzte Zelle eruieren
können,
„zuletzt besetzte Zelle“? Ich hab das sowieso nicht kapiert warum man da mit Activecell arbeiten müßte.
Deshalb Nachfrage an den Sportsman, du willst in Spalte C, genauer in C2 mit Autofilter etwas auswählen, daraufhin soll nur die Spalte mitangezeigt werden wo auch diese Auswahl in D:R einen Wert hat?
Okay, Autofilter löst leider kein direktes Vba-Ereignis aus.
Deshalb muß man tricksen.
Vergib über Einfügen—Namen (in XL 2007 mußte suchen wo der Namensmanager ist) den Namen „Hoehe“ für
=ZELLE.ZUORDNEN(17;Tabelle1!S1)
und schreibe in S1
=Hoehe
und kopiere es nach unten.
Hoehe ist die Zeilenhoehe der Zelle in der es steht. Wenn also nun der Autofilter Zeilen ausblendet macht er dies indem er die Zeilenhöhe auf 0 setzt.
Daraufhin wird =Hoehe automatisch neu berechnet. Und schon haben wir mit Vba ein auswertbares Ereignis, das _Calculate-Ereignis.
Nun der Code, der gehört in das Modul des Blattes Tabelle1.
Option Explicit
Private Sub Worksheet\_Calculate()
Dim ZeiSicht As Range
ActiveSheet.Columns.Hidden = False
Set ZeiSicht = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)
If Not ZeiSicht.Rows.Count = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row Then
Range(Split(ZeiSicht.Address, ",")(1)).SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
End If
End Sub
PS: wie ersichtlich überprüfe ich die Anzahl der sichtbaren Zeilen um zu wissen ob gefiltert wurde. Ich meine aber zu wissen daß man auch da irgendwie mit
Msgbox Activesheet.Autofilter.Mode *geraten* o.ä. das Gleiche feststellen kann, weiß jmd. die Syntax dafür? danke
Gruß
Reinhard