Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1144to1148
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

Makro mal langsam / mal schnell

Makro mal langsam / mal schnell
David
Hallo zusammen,
ich habe ein (für mich) nicht nachvollziehbares Phänomen:
In einer Tabelle habe ich mir über 5 Schaltflächen eine Art Filter selbstgebastelt, da der Autofilter an der Stelle zu unflexibel war. Funzt normalerweise auch top und recht zügig (unter 1 Sek.). Wenn ich nun allerdings die Seitenansicht wähle, anschließend in die Tabelle zurückgehe und dann die Schaltflächen betätige, dauert das Filtern auf einmal ca. 10 Sekunden. Schließe ich die Tabelle gehts wieder flott, nach Seitenansicht wieder langsam, ohne irgendeine Änderung an der Tabelle.
Andere Tabellen sind nicht offen.
Hat jemand eine Idee, woran das liegen könnte?
Den Code hänge ich mit an, ist zwar wahrscheinlich an sich nicht der schnellste, für die begrenzte Zahl an Zeile sollte die Schleife doch aber ausreichend performant sein.
Danke schonmal und Gruß
David
Option Explicit
Dim ZTRV As Boolean
Dim ZRWK As Boolean
Dim FERT As Boolean
Dim ZPCK As Boolean
Dim HALB As Boolean
Dim ROH As Boolean
Sub GetMoreSpeed(bYesNo As Boolean)
Application.ScreenUpdating = Not (bYesNo)
Application.EnableEvents = Not (bYesNo)
Application.Calculation = IIf(bYesNo, xlCalculationManual, xlCalculationAutomatic)
If Not bYesNo Then Calculate
End Sub
Sub filtern()
Dim i As Double
Dim Typ As String
GetMoreSpeed True
For i = 1 To 480
Select Case Range("S" & i)
Case "ZTRV"
If ZTRV Then Rows(i).Hidden = True Else Rows(i).Hidden = False
Case "ZRWK"
If ZRWK Then Rows(i).Hidden = True Else Rows(i).Hidden = False
Case "FERT"
If FERT Then Rows(i).Hidden = True Else Rows(i).Hidden = False
Case "ZPCK"
If ZPCK Then Rows(i).Hidden = True Else Rows(i).Hidden = False
Case "HALB"
If HALB Then Rows(i).Hidden = True Else Rows(i).Hidden = False
Case "ROH"
If ROH Then Rows(i).Hidden = True Else Rows(i).Hidden = False
End Select
Next
GetMoreSpeed False
End Sub
Private Sub ToggleButton1_Click()
If Range("U1") Then
ZTRV = True
Else
ZTRV = False
End If
Call filtern
End Sub
Private Sub ToggleButton2_Click()
If Range("V1") Then
ZRWK = True
Else
ZRWK = False
End If
Call filtern
End Sub
Private Sub ToggleButton3_Click()
If Range("W1") Then
FERT = True
Else
FERT = False
End If
Call filtern
End Sub
Private Sub ToggleButton4_Click()
If Range("X1") Then
ZPCK = True
Else
ZPCK = False
End If
Call filtern
End Sub
Private Sub ToggleButton5_Click()
If Range("Y1") Then
HALB = True
Else
HALB = False
End If
Call filtern
End Sub
Private Sub ToggleButton6_Click()
If Range("Z1") Then
ROH = True
Else
ROH = False
End If
Call filtern
End Sub

AW: Makro mal langsam / mal schnell
16.03.2010 14:55:12
Rudi
Hallo,
evtl. hilft's:
Sub filtern()
Dim i As Double
Dim Typ As String
GetMoreSpeed True
Rows.Hidden = False
For i = 1 To 480
Select Case Range("S" & i)
Case "ZTRV": Rows(i).Hidden = ZTRV
Case "ZRWK": Rows(i).Hidden = ZRWK
Case "FERT": Rows(i).Hidden = FERT
Case "ZPCK": Rows(i).Hidden = ZPCK
Case "HALB": Rows(i).Hidden = HALB
Case "ROH":  Rows(i).Hidden = ROH
End Select
Next
GetMoreSpeed False
End Sub

Sinniger wäre aber die Verwendung des Filters.
Gruß
Rudi
AW: Makro mal langsam / mal schnell
16.03.2010 15:02:03
David
Hallo Rudi,
leider keine Verbesserung.
Ich habe in der Tabelle insgesamt 6 Filterwerte. Wenn ich nun z. Bsp. 3 davon anzeigen lassen und 3 verstecken will, hilft mir der Autofilter nicht weiter, da er maximal 2 Kriterien zulässt. Außerdem müsste ich die immer wieder manuell über "benutzerdefiniert" eingeben.
Wenn du eine bessere Methode kennst, wie ich dieses Ziel erreichen kann, immer her damit.
Gruß
David
Anzeige
was steht denn in U1, V1 etc?
16.03.2010 15:25:11
Rudi
U1,V1 = WAHR/FALSCH *LOL* (owT)
16.03.2010 15:29:54
Renee

AW: U1,V1 = WAHR/FALSCH *LOL* (owT)
16.03.2010 15:38:50
David
Hallo Renee,
ich sehe keinen Grund, das Ganze ins Lächerliche zu ziehen!
In den besagten Zellen steht jeweils tatsächlich WAHR/FALSCH, je nachdem, ob ich den entsprechenden Wert in der Tabelle angezeigt oder ausgeblendet haben will.
Diese Zellen sind mit den betreffenden Toggle-Buttons verlinkt, so dass diese auch den Status anzeigen, der aktuell gewählt ist.
Da ich nicht eingrenzen kann, ob das Problem an der Tabelle oder am Code liegt, habe ich erst mal nur den Code gepostet, da die Bereinigung der Tabelle für die "Öffentlichkeit" recht aufwendig wird.
Wie auch schon zu Rudi gesagt, für Alternativen, wie ich das Ziel - nämlich einen Filter für insgesamt 6 Werte in jeder möglichen Kombination - einfacher und/oder schneller erreichen kann, bin ich offen. Mit meinen begrenzten VBA-Fähigkeiten konnte ich es nur so lösen.
Gruß
David
Anzeige
Excel Profi => Lächerlich *fg* (owT)
16.03.2010 19:47:16
Renee

AW: Excel Profi => Lächerlich *fg* (owT)
17.03.2010 08:06:35
David
Hallo Renee,
welcher Teil meiner Ausführungen veranlasst dich denn zu deinem mehr oder weniger sinnvollen Kommentar? Im gesamten Thread ging es um ein VBA-Problem, bei welchem ich meinen Level realistisch auf höchstens (!) bescheiden einschätze. Excel-Kenntnisse waren nie Thema.
Wäre schön, wenn du entweder solche Aussagen erläutern würdest, oder es einfach bleiben lässt, denn besonders konstruktiv oder hilfreich ist das nicht.
Danke.
David
AW: was steht denn in U1, V1 etc?
16.03.2010 16:00:30
David
Hallo Rudi,
siehe Rest des Threads.
Gruß
David
AW: Makro mal langsam / mal schnell
16.03.2010 15:38:27
JoWE
so schon probiert?
Sub filtern()
Dim sb, Typ As String
Rows.Hidden = False
Call jupp("ZTRV")
Call jupp("ZRWK")
Call jupp("FERT")
Call jupp("ZPCK")
Call jupp("HALB")
Call jupp("ROH")
End Sub
Sub suchen_und_verstecken(sb)
On Error Resume Next
With Worksheets(1).Range("S1:S500")
Set c = .Find(sb, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
.Rows(c.Row).Hidden = True
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
End Sub

Anzeige
AW: Makro mal langsam / mal schnell
16.03.2010 15:59:28
David
Hallo Jowe,
den Code verstehe ich nicht. Was ist "jupp"? Wie kann ich damit das gewollte Ziel erreichen (siehe anderes Posting)?
Ich hab auch noch die Datei hochgeladen.
Gruß
David
AW: Makro mal langsam / mal schnell
16.03.2010 19:36:33
JOWE
es muss natürlich heißen: call suchen_und_verstecken("nnn")
wobei nnn durch Deine Begriffe zu eretzen ist.
Es geht bei meinem Posting ausschließlich um das Suchen der entsprechenden Zeilen, die dann ausgeblendet werden.
AW: Makro mal langsam / mal schnell
16.03.2010 16:03:11
Uwe
Hallo David,
schreibe mal in die GetMoreSpeed noch diese Zeile:
ActiveSheet.DisplayPageBreaks = False
Gruß Uwe
AW: Makro mal langsam / mal schnell
16.03.2010 15:57:17
David
Hier die Datei:
https://www.herber.de/bbs/user/68590.xls
Vielleicht kann mal jemand versuchen nachzuvollziehen, ob der Fehler vielleicht nur bei mir auftritt.
Nochmal zur Erläuterung:
Datei öffnen, dann Auswahlbuttons beliebig kombiniert aktivieren oder deaktivieren - alles zügig innerhalb von Sekundenbruchteilen.
Dann Seitenansicht auswählen, diese wieder shcließen und noch einmal die Buttons versuchen, dann sollte jeder Klick auf den Button mehrere Sekunden dauern.
Gruß
David
Anzeige
Beachte UWE's Tipp ! (owT)
16.03.2010 16:29:59
Renee

AW: Makro mal langsam / mal schnell
16.03.2010 17:29:30
fcs
Hallo David,
der "Fehler" tritt nicht nur bei dir auf.
Sobald man die Seitenvorschau anzeigt oder den Druckbereich einrichtet wird das Ein-/Ausblenden ausgebremst.
Uwes Tipp bereinigt das Problem bei der Makroausführung.
Alternativ könntest du mit deinem Makro auch in einer Hilfsspalte den Wert der Toggle-Buttons eintragen und den Autofilter benutzen.
Gruß
Franz
Hier dein angepasster und noch ein weig eingekürzter Code:
Option Explicit
Dim ZTRV As Boolean
Dim ZRWK As Boolean
Dim FERT As Boolean
Dim ZPCK As Boolean
Dim HALB As Boolean
Dim ROH As Boolean
Sub GetMoreSpeed(bYesNo As Boolean)
Application.ScreenUpdating = Not (bYesNo)
Application.EnableEvents = Not (bYesNo)
Application.Calculation = IIf(bYesNo, xlCalculationManual, xlCalculationAutomatic)
ActiveSheet.DisplayPageBreaks = Not bYesNo
If Not bYesNo Then Calculate
End Sub
Sub filtern()
Dim i As Double
Dim Typ As String
GetMoreSpeed True
ActiveSheet.UsedRange.EntireRow.Hidden = False
For i = 1 To ActiveSheet.Cells(Rows.Count, 19).End(xlUp).Row
Select Case Range("S" & i)
Case "ZTRV": Rows(i).Hidden = ZTRV
Case "ZRWK": Rows(i).Hidden = ZRWK
Case "FERT": Rows(i).Hidden = FERT
Case "ZPCK": Rows(i).Hidden = ZPCK
Case "HALB": Rows(i).Hidden = HALB
Case "ROH":  Rows(i).Hidden = ROH
End Select
Next
GetMoreSpeed False
End Sub
Private Sub ToggleButton1_Click()
ZTRV = Range("U1")
Call filtern
End Sub
Private Sub ToggleButton2_Click()
ZRWK = Range("V1")
Call filtern
End Sub
Private Sub ToggleButton3_Click()
FERT = Range("W1")
Call filtern
End Sub
Private Sub ToggleButton4_Click()
ZPCK = Range("X1")
Call filtern
End Sub
Private Sub ToggleButton5_Click()
HALB = Range("Y1")
Call filtern
End Sub
Private Sub ToggleButton6_Click()
ROH = Range("Z1")
Call filtern
End Sub

Anzeige
AW: Makro mal langsam / mal schnell
17.03.2010 08:19:33
David
Hallo Franz,
das hat geklappt. Danke soweit.
Mittlerweile sind mir noch zwei weitere Ungereimtheiten aufgefallen.
1. Wenn ich den Code mindestens einmal laufen lasse, anschließend in die Seitenansicht und wieder zurück gehe, sieht das Blatt hinterher so aus:
Userbild
Die Buttons sind dann auch nicht anwählbar, wenn ich auf den grauen Bereich in den Spaltenköpfen klicke, "erscheint" einer nach dem anderen der Buttons, sind aber nicht aktivierbar. Nach einem Wechsel auf ein beliebiges anderes Blatt und wieder zurück funzt alles wie vorher.
2. In der Statusleiste steht anschließend "Berechnen", so als ob die Berechnung auf manuell wäre. In den Optionen ist diese aber auf automatisch eingestellt.
Irgendwie habe ich die Vermutung, dass das Ganze mit dem "Beschleunigungs-Makro" zusammenhängt. Es ist als ob die einzelnen Stati (Calculation, Screenupdating) nicht richtig wieder auf den Ausgangszustand zurückgesetzt werden. Ich habe diesen Code mal vor langer Zeit hier im Forum aufgeschnappt (ich glaube von Hajo) und bisher auch erfolgreich eingesetzt. In vielen anderen Makros funzt er prima.
Gibts dazu noch irgendwelche Ideen oder Kommentare?
Danke und Gruß
David
Anzeige
Problem anscheinend gelöst ?!?
17.03.2010 08:38:17
David
Folgendes habe ich nun selbst herausbekommen:
Ich hatte die Buttons zwecks Optik gruppiert, damit die Abstände etc. beim Verschieben erhalten bleiben. Wenn ich diese Gruppierung löse, tritt das Phänomen mit den "verschwundenen" und verzerrten Buttons nicht mehr auf.
Verstehe ich zwar nicht, aber da es jetzt wunschgemäß geht, ist's ok.
Danke allen, die sich konstruktiv beteiligt haben.
Gruß
David
AW: Makro mal langsam / mal schnell
17.03.2010 08:40:16
Uwe
Hallo David,
teste es mal so:

Sub filtern()
Dim i As Double
Dim Typ As String
ActiveCell.Activate '
Gruß Uwe
AW: Makro mal langsam / mal schnell
17.03.2010 08:47:09
David
Hallo Uwe,
damit funzt es auch bei gruppierten Buttons. Verstehe ich zwar nicht, aber von mir aus... ;-)
Danke und Gruß
David
Anzeige
AW: Makro mal langsam / mal schnell
17.03.2010 09:11:17
David
Selig sind die Wissenden. ;-)
Danke für die Aufklärung.
Gruß
David

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige