Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
760to764
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
760to764
760to764
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Problem Makrolaufzeit

Problem Makrolaufzeit
07.05.2006 19:26:00
SteffenS
Hallo und guten Abend,
ich habe ein Makro welches unter bestimmten Bedingungen Zeilen ein- bzw. ausblendet.
Mein Problem ist, dass wenn ich die Arbeitsmappe wo das Makro angewandt wird öffne und Makro starte ist es innerhalb von 1 sec. durch.
starte ich das Makro dann nochmals, dauert es 45 sec.
Woran kann dies liegen ich weiss nicht mehr was ich da tun soll.
Mein Code sieht folgendermaßen aus, wobei nur die Do Schleife so lang braucht.
'Änderungen ausschalten
Application.ScreenUpdating = False
'Schutz aufheben
schutz_aufheben_only
Dim stati As Long
If marke_1.Value = True Then
stati = 1
ElseIf marke_2.Value = True Then
stati = 2
ElseIf all_marken.Value = True Then
stati = 5
ElseIf gesamtansicht.Value = True Then
stati = 4
Else
stati = 9
End If
'Berechnung aus
Application.Calculation = xlManual
'Bereich ein-/ausblenden
Dim lgZeile As Integer
lgZeile = 8
Do
'Zeile einblenden
Rows(lgZeile).EntireRow.Hidden = False
If Cells(lgZeile, 256) = stati Then Rows(lgZeile).EntireRow.Hidden = False
If Cells(lgZeile, 256) stati Then Rows(lgZeile).EntireRow.Hidden = True
If Cells(lgZeile, 256) = "" Or Cells(lgZeile, 256) = "9" Then Rows(lgZeile).EntireRow.Hidden = False
'Alles einblenden bei Gesamtansicht
If stati = 4 Then Rows(lgZeile).EntireRow.Hidden = False
'Markenwechsel beachten
If marke_1.Enabled = False And Cells(lgZeile, 256) = 1 Then Rows(lgZeile).EntireRow.Hidden = True
If marke_2.Enabled = False And Cells(lgZeile, 256) = 2 Then Rows(lgZeile).EntireRow.Hidden = True
'Option alles ausblenden
If stati = 9 And (Cells(lgZeile, 256).Value "" Or Cells(lgZeile, 256).Value = "9") Then
Rows(lgZeile).EntireRow.Hidden = True
End If
If stati = 9 And Cells(lgZeile, 1).Value = "-" Then
Cells(lgZeile, 1).Value = "+"
ElseIf Cells(lgZeile, 1).Value = "+" Then
Cells(lgZeile, 1).Value = "-"
End If
lgZeile = lgZeile + 1
Loop Until lgZeile = 531
'Berechnung ein
Application.Calculation = xlAutomatic
'Application.Calculate
'Wert in Blatt eintragen
Select Case stati
Case 1
Range("C6").Value = bez_01.Caption
Case 2
Range("C6").Value = bez_02.Caption
Case 5
Range("C6").Value = bez_03.Caption
Case 4
Range("C6").Value = bez_04.Caption
Case 9
Range("C6").Value = bez_05.Caption
End Select
'Stati & Format für Symbolleiste setzen
If stati "9" Then
Range("A1").Value = "-"
Else
Range("A1").Value = "+"
End If
Range("A1").NumberFormat = ";;;"
'seitenwechsel setzen
seitenwechsel_setzen (stati)
'Schutz setzen
schutz_setzen_only
'Änderungen wieder einblenden
Application.ScreenUpdating = True
'UF ausblenden
Unload Me
'Bildschirm rücksetzen
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
Range("B2").Select
raus:
'Symbolleiste neu erzeugen
SYMBERZ
'Änderungen wieder einblenden
Application.ScreenUpdating = True
End Sub
Danke im Voraus.
MFG
Steffen Schmerler

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem Makrolaufzeit
07.05.2006 20:19:16
ChrisL
Hallo Steffen
Sowas kann nur schwer rekonstruiert werden. Würde mal prüfen ob es vielleicht nicht an den anderen Prozeduren liegt:
'seitenwechsel setzen
seitenwechsel_setzen (stati)
'Schutz setzen
schutz_setzen_only
'Symbolleiste neu erzeugen
SYMBERZ
Sonst ist mir nur aufgefallen, dass du lgZeile als Interger deklarierst (lg = Long), wobei Integer OK ist, wenn du tatsächlich immer 531 Zeilen durchläufst. Erwähne es nur, weil mehr Zeilen das Performance-Problem erklären könnten.
Die Berechnung wieder einschalten wäre gegen Ende vom Code angesagt, etwa dort wo du ScreenUpdating wieder aktivierst.
Gruss
Chris
Anzeige
AW: Problem Makrolaufzeit
07.05.2006 20:34:09
SteffenS
an den anderen Makros liegt es nicht.
Es hängt an der Schleife. Es macht nur stutzig, dass wenn ich die Datei öffne der Code schnell läuft und beim zweiten mal dauert es "ewig".
Ich weiss echt nicht mehr weiter....
Danke nochmals für Eure Hilfe
MFG
Steffen Schmerler
AW: Problem Makrolaufzeit
07.05.2006 21:44:33
MichaV
Hallo,
wenns nur an der Schleife liegt, schmeiße mal die folgenden Zeilen raus, da überflüssig.
Rows(lgZeile).EntireRow.Hidden = False
If Cells(lgZeile, 256) = stati Then Rows(lgZeile).EntireRow.Hidden = False
If Cells(lgZeile, 256) stati Then Rows(lgZeile).EntireRow.Hidden = True
If Cells(lgZeile, 256) = "" Or Cells(lgZeile, 256) = "9" Then Rows(lgZeile).EntireRow.Hidden = False
'Alles einblenden bei Gesamtansicht
If stati = 4 Then Rows(lgZeile).EntireRow.Hidden = False
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Problem Makrolaufzeit
08.05.2006 00:10:44
Gerd
Hallo Steffen,
wenn Du deine verschiedenen Kriterien benötigst, dann
blende die relavanten Zeilen zusammen am Schluss auf einmal aus.
Bei deinem Code wird jede Zeile einzeln zigmal aus- u. eingeblendet.
Das kostet Speicherplatz u. -Zeit.

Sub versuch()
Dim rngAusblenden As Range
Dim ausbl As Boolean
'Const stati = 99 'nur für test
Dim lgzeile As Integer
For lgzeile = 8 To 531
If Cells(lgzeile, 256) = stati Then ausbl = False
If Cells(lgzeile, 256) <> stati Then ausbl = True
If Cells(lgzeile, 256) = "" Or Cells(lgzeile, 256) = "9" Then ausbl = False
'Alles einblenden bei Gesamtansicht
If stati = 4 Then ausbl = False
'Markenwechsel beachten
If marke_1.Enabled = False And Cells(lgzeile, 256) = 1 Then ausbl = True
If marke_2.Enabled = False And Cells(lgzeile, 256) = 2 Then ausbl = True
'Option alles ausblenden
If stati = 9 _
And (Cells(lgzeile, 256).Value <> "" Or Cells(lgzeile, 256).Value = "9") Then ausbl = True
If stati = 9 And Cells(lgzeile, 1).Value = "-" Then
Cells(lgzeile, 1).Value = "+"
ElseIf Cells(lgzeile, 1).Value = "+" Then
Cells(lgzeile, 1).Value = "-"
End If
If ausbl Then
If Not rngAusblenden Is Nothing Then
Set rngAusblenden = Union(rngAusblenden, Range(Cells(lgzeile, 1), Cells(lgzeile, 256)))
Else
Set rngAusblenden = Range(Cells(lgzeile, 1), Cells(lgzeile, 256))
End If
End If
Next
rngAusblenden.EntireRow.Hidden = True
Set rngAusblenden= nothing
End Sub

Gruß
Gerd
Anzeige
bitte nochmal Hilfe
08.05.2006 21:31:32
SteffenS
Hallo Gerd,
den oberen Teil verstehe ich noch soweit, aber bei dem Teil
If ausbl Then
If Not rngAusblenden Is Nothing Then
Set rngAusblenden = Union(rngAusblenden, Range(Cells(lgzeile, 1), Cells(lgzeile, 256)))
Else
Set rngAusblenden = Range(Cells(lgzeile, 1), Cells(lgzeile, 256))
End If
End If
Next
rngAusblenden.EntireRow.Hidden = True
Set rngAusblenden= nothing
hört mein wissen auf.
Ich habe den Code jetzt eingebaut aber dass mit dem einblenden klappt nicht
Was passiert bei dem unterem Teil, vielleicht kannst Du nochmal ein paar Kommentare ranschreiben. Ich kann VBA zwar ganz gut, aber ein Lücken habe ich dann doch noch....
Danke Dir
MFG
Steffen Schmerler
Anzeige
AW: Problem Makrolaufzeit
08.05.2006 22:44:28
Gerd
Hallo Steffen
rngAusblenden ist ein Range_Object.
Daher Zuweisungen mit Set.
Vor der ersten Zuweisungsanweisung gibt es als "Wert" Nothing zurück.
Mit der Union-Methode werden die enthaltenen Bereiche, hier= Zeilen "erweitert" um
den (Zeilen-)Bereich, für den die Varialble ausbl true ist.
If Not.. habe ich vorangestellt, da diese Bedingung im Ablauf viel häufiger zutrifft
(d.h. das Rangeobject ist nach der ersten Zuweisung immer nicht merhr 'Nothing')
Nach dem Ende der Schleife Enthält das Object die Bereiche aller Zeilen, die ausgeblendet werden sollen.
EntireRow = Zeilen, in denen das Object 'liegt'.
Bei nur Union(Rows(Zeile),Rows(zeile)) funktioniert EntireRow nicht.
O.K.
Gestern war es bei mir wieder mal etwas spät geworden.
Wenn ich mir deine Bedingungen nochmal so durchsehe, dann wirst Du wohl
noch wegen Wiederholungen
Range(cells(8,1,cells(531,256).EntireRow.Hidden= true
vor die Schleife stellen müssen.
Gruß
Gerd
Anzeige
danke für Deine Hilfe
09.05.2006 21:23:42
SteffenS
ich habs jetzt hinbekommen.
MFG
Steffen Schmerler

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige