Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1156to1160
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Geschwindigkeit bei Rows.Hidden

Geschwindigkeit bei Rows.Hidden
Rainer
Hallo,
wollte anstelle des Autofilters folgende Codes einsetzen:
Sub Filter_x_ausblenden()
Dim wks As Worksheet
Dim i As Integer
Set wks = ThisWorkbook.Worksheets("Tabelle1")
With wks
For i = 7 To 50
If .Cells(i, 2).Value = "x" Then
.Rows(i).Hidden = True
Else
.Rows(i).Hidden = False
End If
Next i
End With
End Sub
Sub Filter_einblenden()
Dim wks As Worksheet
Dim i As Integer
Set wks = ThisWorkbook.Worksheets("Tabelle1")
With wks
For i = 7 To 50
.Rows(i).Hidden = False
Next i
End With
End Sub

Diese sind allerdings sehr langsam.
Kennt jemand noch eine Alternative, welche für das Ein-/Ausblenden verwendet werden könnte?
Gruß Rainer
Vlcht. genügt Application.ScreenUpdating=False
31.05.2010 16:33:24
NoNet
Hallo Rainer,
teste es mal mit diesem ergänzten Code :
Sub Filter_x_ausblenden()
Dim wks As Worksheet
Dim i As Integer
Set wks = ThisWorkbook.Worksheets("Tabelle1")
Application.ScreenUpdating = False
With wks
For i = 7 To 50
If .Cells(i, 2).Value = "x" Then
.Rows(i).Hidden = True
Else
.Rows(i).Hidden = False
End If
Next i
End With
Application.ScreenUpdating = True
End Sub
Gruß, NoNet
AW: Vlcht. genügt Application.ScreenUpdating=False
31.05.2010 17:05:49
Rainer
Hallo "NoNet",
vielen Dank für die Mithilfe.
Bringt eigentlich nur Ruhe in den Ablauf. Gemessen mit dem Sekundenzeiger der PC-Uhr scheint es an Geschwindigkeits nichts gebracht zu haben.
Gruß Rainer
Anzeige
Zeilen mit X in Spalte B ausblenden
31.05.2010 17:37:50
NoNet
Hallo Rainer,
eigentlich sollte der "Sekundenzeiger" bei solch einem kleinen Breich (50 Zeilen) gar nicht zusehen sein !
Ich habe das Makro mit 5000 Zeilen getestet, da dauert die Ausführung immerhin ca. 3-4 Sekunden....
Teste mal diese optimierte Makro-Version (Bereich B7:B5000 bitte zuvor anpassen !) :
Sub Filter_x_ausblendenSchnell()
Dim wks As Worksheet
Dim lngZ As Long
Dim rngBereich As Range, rngZelle As Range, rngAusblenden As Range
Set wks = ThisWorkbook.Worksheets("Tabelle1")
'Application.ScreenUpdating = False
With wks
Set rngBereich = .Range("B7:B5000") 'Hier den zu durchsuchenden Bereich anpassen
If Application.CountIf(rngBereich, "x") > 0 Then
Set rngZelle = rngBereich.Find("x")
Set rngAusblenden = rngZelle
lngZ = rngZelle.Row
Set rngZelle = rngBereich.FindNext(After:=rngZelle)
While rngZelle.Row > lngZ
Set rngAusblenden = Union(rngAusblenden, rngZelle)
lngZ = rngZelle.Row
Set rngZelle = rngBereich.FindNext(After:=rngZelle)
Wend
rngAusblenden.EntireRow.Hidden = True
End If
End With
'Application.ScreenUpdating = True
'Speicher für Objektvariablen imn umgekehrter Reihenfolge wieder freigeben :
Set rngAusblenden = Nothing
Set rngZelle = Nothing
Set rngBereich = Nothing
End Sub

Gruß, NoNet
Anzeige
das scheint ! Dir aber nur so ...
31.05.2010 17:39:44
Matthias
Hallo Rainer
Bei dieser kleinen Schleife sicher kaum erkennbar, dennoch bringt es einen Geschwindigkeitsvorteil
Teste das mal an einer etwas längeren Schleife. (Bitte mit einer neuen leeren Arbeitsmappe )
Userbild
Formatiere B1:B3 vorher als Uhrzeit
Teste das nun einmal mit der Zeile und einmal ohne der Zeile: Application.ScreenUpdating = 0
Sub test()
Dim i As Long
Application.ScreenUpdating = 0
Cells(1, 2) = Time
For i = 1 To 500000
Cells(1, 1) = i
Next
Cells(2, 2) = Time
End Sub
und in B3 dann einfach B2-B1
Nun wirst Du erkennen das es wirklich nur scheinbar nichts brachte
Gruß Matthias
Anzeige
AW: Geschwindigkeit bei Rows.Hidden
31.05.2010 19:34:04
Gerd
Hallo Rainer!
Sub Ausblenden()
Dim rngKriterienbereich As Range
Set rngKriterienbereich = Tabelle1.Range(Cells(7, 2), Cells(50, 2))
With rngKriterienbereich
.EntireRow.Hidden = False
If Application.WorksheetFunction.CountIf(.Cells, "x") > 0 Then
.Replace what:="x", Replacement:=True, lookat:=xlWhole, MatchCase:=False
.SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Hidden = True
.Replace what:=True, Replacement:="x", lookat:=xlWhole, MatchCase:=False
End If
End With
End Sub
Sub Einblenden()
Tabelle1.Rows("7:50").Hidden = False
End Sub
Gruß Gerd
Anzeige
AW: Geschwindigkeit bei Rows.Hidden
31.05.2010 20:04:09
Rainer
Hallo,
vielen Dank für Eure Hilfen.
Ich verzweifle allerdings gerade an einem anderen Problem!
In Verbindung mit jedem Eurer Codes scheitert mein Code an der AutoFit Einstellung in den ComboBoxen.
Private Sub ComboBox1_Change()
Rows("7:50").AutoFit
End Sub
Auch andere mit dem MakroEditor aufgezeichnete Codes scheitern.
Könnt Ihr mir da auch helfen?
Gruß Rainer
AW: Geschwindigkeit bei Rows.Hidden
31.05.2010 20:07:44
Hajo_Zi
Hallo Rainer,
vielleicht als 2. Zeile
With Tabelle1
vor Rows ein Punkt
und vor End Sub End With.

Anzeige
AW: Geschwindigkeit bei Rows.Hidden
31.05.2010 20:45:44
Rainer
Hallo,
irgendwie will das ganze nicht mehr.
So wie es scheint, ist die ComboBox der Auslöser.
Mit dem DropDownFeld der Steuerelemente klappt es zumindest in Verbindung mit dem Makro2, welches mit Call der ComboBox auch nicht klappt.
Hier mal die Testtabelle: https://www.herber.de/bbs/user/69830.xls
Gruß Rainer
AW: Geschwindigkeit bei Rows.Hidden
01.06.2010 13:21:17
fcs
Hallo Rainer,
die Auswahlliste für die Comboboxen darf nicht im Bereich der Zeilen liegen, die ausgewählt und ggf. ausgeblendet werden.
Dann kommt es zu Rückkopplungen und das Combobox-Change-Ereignis wird ständig ausgelöst.
Dieses verträgt sich dann aus mir nicht bekannten Gründen nicht mit der WordWrap-Methode.
Die beiden Combobox-Typen (Formular und Active-X) arbeiten sehr unterschiedlich.
Formular-Box gibt den Index der ausgewählten Zeile beginnend bei 1 zurück. Active-X-Box den Wert der BoundColumn. Dabei treten verschiedene Phänomen auf - hier die unter Excel 2003:
1. BoundColumn = 0 - gibt den ListIndex des gewählten eintrags zurück beginnend bei 0
2. TextColumn = -1 und BoundColumn eine der Spalten
Der ausgewählte Eintrag aus der BoundColumn wird zum Wert der Combobox und steht auch in der LinkedCell. Leider wird der Wert bei Zahlen als Text zurückgegeben, was bei Nutzung für SVERWEIS dann zu Problemen (Wert #NV wird angezeigt) führt.
3. TextColumn und BoundColumn haben verschiedene Werte größer gleich 1
Für den gewählten Eintrag wird der Wert in der Textcolumn angezeigt. In der LinkedCell steht der Wert aus der BoundColumn.
Merkwürdiger Weise werden jetzt die Zahlenwerte in der BoundColumn als Zahlen in die LinkedCell zurückgeschrieben. Warum? Evtl. weiss es jemand bei Microsoft.
Wenn du die Axtive-X-Box einsetzen willst, dann hast du jetzt mehrere Möglichkeiten abhängig davon, ob du die Index-Zahl in Zelle I4, L4, etc. benötigst.
Index-Zahl wird benötigt:
Ändere Eigenschaften der Combobox:
- BoundColumn: 1
- ColumnCount: 2
- ColumnWidths: 20Pt;120Pt   oder ähnlich
- ListWidth: 150    oder ähnlich
- TextColumn: 2
- ListRowSource: anpassen gemäß neuer Position - am besten mit einem Bereichsnamen arbeiten

So kannst du nach dem Produktnamen auswählen und die Index-Nummer wird in der LinkedCell angezeigt.
Index-Zahl wird nicht benötigt:
Ändere Eigenschaften der Combobox:
- BoundColumn: 1
- ColumnCount: 1
- ColumnWidths:   kein Eintrag
- ListWidth: 0
- TextColumn: -1
- ListRowSource: nur noch Produktnamen, anpassen gemäß neuer Position - am besten mit einem  _
Bereichsnamen arbeiten
- LinkedCell: I6     - L6   etc. für die anderen Boxen

So wird der gewählte Produktname direkt in der Titelzeiel der Auswertung eingetragen. Die Formeln, um aus der Index-Nummer den Produktnamen zu ermitteln, benötigst du jetzt nicht mehr.
Gruß
Franz
Anzeige
AW: Geschwindigkeit bei Rows.Hidden
01.06.2010 13:59:17
Rainer
Hallo Franz,
vielen Dank für die ausführliche Darstellung, komme allerdings nun gerade nicht dazu, das gleich auszutesten.
Allerdings scheint wohl SVERWEIS mit LinkedCell definitiv nicht zu gehen.
Deinen Ausführungen zufolge dürfte es aber funktionieren, wenn ich der Zelle über das Ereignis Change den Wert zuweise.
Nun weiß ich jedoch woran es lag.
Danke
Rainer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige