Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1432to1436
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 dauert unterschiedlich lang (Grafik/Form)

Makro dauert unterschiedlich lang (Grafik/Form)
30.06.2015 12:13:58
Erko
Hallo liebes Forum,
ich habe mir ein kleines Makro erstellt, welches mittels iCounter die Zeilen 100 - 200 prüft und bei einem bestimmten Wert ausblendet.
Das Makro funktioniert, wenn ich via Formularsteuerelement ausführe, wunderbar.
Lege ich das Makro allerdings hinter eine Grafik oder Form (Rechteck etc.), dauert es statt 2-3 Sekunden mehr als eine Minute. Dabei ist es egal, ob ich auf dem jeweiligen Sheet bin oder auf einem anderen.
Wie kann ich das Problem lösen?
LG
Erko

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro dauert unterschiedlich lang (Grafik/Form)
30.06.2015 13:01:44
Daniel
Hi
kannst du die Datei mal hochladen?
am besten mit beiden Varianten.
Gruß Daniel

AW: Makro dauert unterschiedlich lang (Grafik/Form)
30.06.2015 13:29:32
Erko
Hallo,
anbei ist die Datei:
https://www.herber.de/bbs/user/98565.xlsm
Ich musste sie aus Datenschutzgründen zum "Muster" ändern. ;)
LG und vielen Dank für deine Hilfe

AW: Makro dauert unterschiedlich lang (Grafik/Form)
30.06.2015 15:39:59
Daniel
Hi
dauert bei mir beides gleich lang.
aber warum schreibst du aufwendige Makros, wenn man doch einfach den Autofilter benutzen kann?
Du hast den bezahlt zusammen mit Excel bezahlt, da musst du das nicht nochmal programmieren.
schneller gehts, wenn du mit Application.ScreenUpdating = False vor der Schleife die Bildschirmaktualisierung ausschaltet.
dann ändert sich der Bildschirm während des Makrolaufs nicht sondern zeigt erst am Schluss das Endergebnis.
Gruß Daniel

Anzeige
AW: Makro dauert unterschiedlich lang (Grafik/Form)
01.07.2015 09:05:55
Erko
Moin,
ich habe es eben noch ein mal getestet.
Bei mir dauert es im Muster auch gleichlang, aber nur solange, wie die richtige Datei geschlossen ist ... verstehe ich nicht.
Das Makro benötige ich, weil ich unterschiedliche Tabellen, die untereinander sind, Filtern muss. Jede Tabelle hat bis zu 50 Positionen - entsprechend müsste ich mehrmals den Autofilter nutzen. Außerdem sollen die Nutzer dieses Sheet gar nicht sehen, sondern nur die "fertige" Tabelle via verknüpfter Grafik.
Deshalb muss auch die Ausführung der Makros auf einem anderen Blatt stattfinden.
@ Michael: Vielen Dank, leider funktioniert der Code nicht. Lautzeitfehler 9 - Index außerhalb des gültigen Bereichs.

Anzeige
AW: Makro dauert unterschiedlich lang (Grafik/Form)
01.07.2015 15:17:28
Michael
Hi Erko,
das kann ich nicht nachvollziehen - bei mir funktioniert's einwandfrei - mit *Deinen* Daten.
Ich lad Dir mal Deine erweiterte Datei hoch: https://www.herber.de/bbs/user/98580.xlsm
Hast Du evtl. zwischenzeitlich einen Blattnamen geändert? Von Test2 auf was anderes?
Schöne Grüße,
Michael

AW: Makro dauert unterschiedlich lang (Grafik/Form)
02.07.2015 09:05:45
Erko
Hi Michael,
vielen Dank für deine Hilfe. In deiner Beispiel-Datei funktioniert der Code. In meiner Datei mit gleichem Blattnamen kommt aber nach der MsgBox der Error "400".
Es scheint irgendwie, als sei die Datei irgendwie "zerschossen", sodass VBA nicht richtig funktioniert - gibts sowas? :s

Anzeige
AW: Makro dauert unterschiedlich lang (Grafik/Form)
02.07.2015 11:24:05
Michael
Hi Erko,
ich hab da was gefunden zu "400"; es scheint etwas spitzfindig zu sein:
https://www.herber.de/forum/archiv/1220to1224/1223901_VBA_Fehleranzeige_400.html
Du schreibst, der Fehler kommt "direkt" nach der Msgbox - ich vermute, wenn Du einen Button drückst.
Geh doch bitte mal den Code im VB-Editor mit F8-Taste zeilenweise durch und schreibe, in welcher Zeile er auftritt.
Im obigen Post hat es geholfen, das Range(xx).select rauszunehmen; vielleicht hilft es, in beiden Funktionen die Zeile Range("K3").Select je zwei Zeilen über dem untersten end if auszukommentieren.
Gib bitte Bescheid, wie es ist...
Schöne Grüße,
Michael

Anzeige
AW: Makro dauert unterschiedlich lang (Grafik/Form)
06.07.2015 13:38:44
Erko
Moin Michael,
sorry für die späte Antwort - hatte keine Zeit gefunden...
Aber seltsamer Weise funktioniert es zur Zeit in der Datei die ich hochgeladen habe.
In meiner primären Datei besteht weiterhin das Problem.
Wenn ich während der Ausführung des Makros ESC drücke und debuggen will, markiert er immer die vorletzte "end if" Zeile gelb.
            Else
Worksheets("APG").Rows(iCounter).Hidden = False
End If
Next iCounter

LG
Erko

AW: Makro dauert unterschiedlich lang (Grafik/Form)
06.07.2015 13:53:23
Daniel
Hi
wenn du ESC drückst, dann ist das einfach nur die Anweisung, den Programmlauf zu stoppen.
Das ist dann kein Fehler.
Gelb markiert wird immer die Programmzeile, welche als nächstes ausgeführt wird.
dass das immer das END IF ist, könnte daran liegen, dass der davorliegende programmschritt (das Ausblenden) relativ lang dauert und es deswegen sehr warhscheinlich ist, dass dein ESC-Befehl während dieses Programmschritts passiert.
Wenn du ESC drückst wird nach dem Programmschritt, währenddem das ESC festgestellt wurde, gestoppt und der nächste Schritt wird gelb markiert.
Gruß Daniel

Anzeige
überraschende Optimierung ...
30.06.2015 17:06:18
Michael
Hi zusammen,
ich bitte das auszuprobieren:
Option Explicit
Sub Leere_Zeilen_ausblenden()
Dim iCounter&, letztes&
Dim welche As String
If MsgBox("Dieser Vorgang kann 30 - 60 Sekunden in Anspruch nehmen. Wollen Sie die Aktion jetzt  _
ausführen?", _
vbQuestion + vbYesNo, "Aktion ausführen?") = vbYes Then
letztes = ActiveSheet.Index
Worksheets("Test2").Activate
Range("N1").Value = Timer
For iCounter = 8 To 145
If Cells(iCounter, 9).Value  "" Then       ' ***** 5 Sterne
If Cells(iCounter, 9).Value = 0 Then
welche = welche & iCounter & ":" & iCounter & ","
End If
End If
Next iCounter
If Len(welche) > 3 Then
welche = Mid(welche, 1, Len(welche) - 1)
Range(welche).EntireRow.Hidden = True
Range("N2").Value = Timer
Cells(3, 11).Value = "ausgeblendet"
Else
Range("N2").Value = 0
Cells(3, 11).Value = "keine Aktion"
End If
Range("K3").Select
Worksheets(letztes).Activate
End If
End Sub
Sub Leere_Zeilen_einblenden()
Dim letztes&
If MsgBox("Dieser Vorgang kann 30 - 60 Sekunden in Anspruch nehmen. Wollen Sie die Aktion jetzt  _
ausführen?", _
vbQuestion + vbYesNo, "Aktion ausführen?") = vbYes Then
letztes = ActiveSheet.Index
Worksheets("Test2").Activate
Range("O1").Value = Timer
Rows("2:145").EntireRow.Hidden = False
Range("O2").Value = Timer
Cells(3, 11).Value = "eingeblendet"
Range("K3").Select
Worksheets(letztes).Activate
End If
End Sub
Die mit 5 Sternen markierte Zeile ist notwendig, weil der nächste If-Vergleich auch bei leeren Zellen 0 zurückgibt - an sich kein Problem, aber das Range-Objekt regt sich auf, wenn der String (welche) zu lang ist.
Könnte man auch anders gestalten, aber erst auf Anfrage.
Schöne Grüße,
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige