Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Makro dauert unterschiedlich lang (Grafik/Form)

Betrifft: Makro dauert unterschiedlich lang (Grafik/Form) von: Erko
Geschrieben am: 30.06.2015 12:13:58

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

  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Daniel
Geschrieben am: 30.06.2015 13:01:44

Hi
kannst du die Datei mal hochladen?
am besten mit beiden Varianten.
Gruß Daniel


  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Erko
Geschrieben am: 30.06.2015 13:29:32

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


  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Daniel
Geschrieben am: 30.06.2015 15:39:59

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


  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Erko
Geschrieben am: 01.07.2015 09:05:55

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.


  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Michael
Geschrieben am: 01.07.2015 15:17:28

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


  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Erko
Geschrieben am: 02.07.2015 09:05:45

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


  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Michael
Geschrieben am: 02.07.2015 11:24:05

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


  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Erko
Geschrieben am: 06.07.2015 13:38:44

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


  

Betrifft: AW: Makro dauert unterschiedlich lang (Grafik/Form) von: Daniel
Geschrieben am: 06.07.2015 13:53:23

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


  

Betrifft: überraschende Optimierung ... von: Michael
Geschrieben am: 30.06.2015 17:06:18

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


 

Beiträge aus den Excel-Beispielen zum Thema "Makro dauert unterschiedlich lang (Grafik/Form)"