Office: Makro ist brutal langsam

Helfe beim Thema Makro ist brutal langsam in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo VBAler, ich habe ein Makro, das jedes Sheet einer Datei anwählt, in einer festgelegten Range "#Ref!" durch "Tabelle1" ersetzt, zum nächsten Sheet... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von OfficeUser321, 20. April 2009.

  1. Makro ist brutal langsam


    Hallo VBAler,
    ich habe ein Makro, das jedes Sheet einer Datei anwählt, in einer festgelegten Range "#Ref!" durch "Tabelle1" ersetzt, zum nächsten Sheet springt, dort "#Ref!" ersetzt etc, bis alle Sheets durch sind und ich glücklich bin (naja, fast):
    Code:
    Ich habe jetzt zweierlei Problem. Einmal ist das Makro brutal langsam, legt sicherlich für 4 Minuten meinen Rechner lahm, da es 40 Sheets durchsuchen muss. Hat da jemand eine Idee, wie man das performanter gestalten könnte?
    Der zweite Knackpunkt ist, dass das Makro nur bis zum vorletzten Sheet funktioniert, im letzten Sheet läuft es vor den Pöller: Anwendungs- oder objektdefinierter Fehler
    Das passiert immer im letzten Sheet. Schuld ist diese Zeile:
    Code:
    Hat jemand eine Idee, damit es funktioniert und ein wenig flotter wird?
    Schonmal Danke im Vorraus!

    Office User

    :)
     
    OfficeUser321, 20. April 2009
    #1
  2. Hallo,

    zu Deinem ersten Problem (Geschwindigkeit):

    Schalte zu Beginn des Makros die Berechnungsmethode auf "manuell" und am Ende wieder auf "automatisch". Das sollte einen erkennbaren Geschwindigkeitszuwachs bringen.

    Application.Calculation = xlManual

    Application.Calculation = xlAutomatic

    Grüße
    Klaus
     
  3. Moin, OfficeUser,

    den Bereich der zu durchlaufenden Zellen einschränken (hier auf die fehlerhaften Formelzellen in den einzelnen Tabellen) - ungetestet:

    Code:
     
  4. Makro ist brutal langsam

    Das Performance Problem kommt dadurch zustande, dass du nicht 40 mal "Suchen - Ersetzen" machst sondern einmal für jede Zelle in jedem Datenblatt.

    Bei dem Bereich wo du angegeben hast sind das 100.000 + Rechenoperationen (bin gerade zu faul es genau auszurechen).

    Du kannst im Excel (ohne VBA) einen einen Bereich markieren und da über die Standardfunktion Suchen/Ersetzen alles ersetzen und es geht super schnell.

    Den Vorgang tät ich einfach in VBA automatisieren. Hab gerade mal mit dem Makrorecoder was aufgenommen.

    Code:
    Muss man natürlich noch ein bisschen anpassen aber sollte die Geschwindigkeit massiv erhöhen da es so nur 40 Rechenoperationen sind.

    Gruß

    Fairfax
     
    Fairfax, 22. April 2009
    #4
  5. Hallo zusammen,

    erstmal Danke für die Antworten. Das Einarbeiten von Code:
    ist schonmal eine gute Sache. Das kannte ich nicht.
    @jinx: Erstmal Danke, leider funktioniert das Ganze nicht. In der Zeile:
    Code:
    läuft er mit der Meldung "Keine Zellen gefunden" vor den Baum. Leider erschließt sich mir nicht warum? Eine Idee?
    @Fairfax: MIt dem makrorecorder habe ich zu Beginn auch gearbeitet. Das funktioniert allerdings nicht, wenn Du #Ref! ersetzen lassen willst. Excel macht es einfach nicht, warum weiß ich nicht. Google hat mir jedenfalls die Erkenntnis geliefert, dass auch andere das nicht mit dem Recorder hinbekommen haben.

    Hat jemand denn noch eine Anregung, warum sich das Makro weigert, das letzte Sheet zu bearbeiten?

    Grüße

    OfficeUser
     
    OfficeUser321, 22. April 2009
    #5
  6. Moin, OfficeUser321,

    wahrscheinlich erkennt Excel die Daten nicht als Fehlerwerte - entweder im Vorwege die Anzahl der Zellen durch .Cells.Count feststellen lassen und die Aktion nur starten, wenn die Anzahl größer als 0 ist. Ansonsten den Zusatz 16 weglassen, dann sollten alle Formelzellen in die Auswahl kommen.

    Die Fehlermeldung taucht halt immer auf, wenn SpecialCells eine bestimmte Art von Zellen nicht finden kann. Übergehen kann man es wie oben beschrieben durch Zählen oder durch Verwendung von On Error Resume Next, wobei das nur die Meldung übergeht, aber keine Aktion ausführt.

    Mich würde ein Ausschnitt Deiner Daten interessieren - ich war bisher der Meinung, man müsse anders an die Umwandlung von Fehlerwerten herangehen...

    Wegen der Fehlermeldung auf der letzten Tabelle: Sieh Dir Deine Bedingungen für die Schleife an - auf der letzten Tabelle wird eine nicht vorhandene Tabelle (wks + 1) ausgewählt. Warum habe ich wohl eine "sichere" Schleife vorgestellt mit For Each wks in Worksheets... ?
     
  7. Hi jinx,

    ich habe jetzt, wie von Dir angeregt,einfach:
    Code:
    rausgenommen, somit sieht das komplette Ergebnis jetztso aus:
    Code:
    Das ganze funktioniert super, als I-Tüpfelchen wird jetzt auch das letzteSheet mitgenommen. Zum Verständnis: Könntest Du mir die Zeile :
    Code:
    noch erklären und warum die jetzt den Fehler verursacht hat? Danke!

    Gruß

    OfficeUser
     
    OfficeUser321, 22. April 2009
    #7
  8. Makro ist brutal langsam

    Moin, OfficeUser321,

    die Verwendung von wks.Range("B16:AE100").SpecialCells(xlCellTypeFormulas) würde alle Formelzellen der jeweiligen Tabelle ermitteln und nur diese durchlaufen. Die Einschränkung auf die 16 war eine Begrenzung der Formelzellen auf solche, die eine Fehlermeldung darstellen (wahrscheinlich aber nur diejenigem die den gesamten Ausdruck als Fehler darstellen).

    Bei Deinem Makro fehlt meiner Meinung nach die Begrenzung auf Formelzellen bzw. die Prüfung auf Formeln in den Zellen... *wink.gif*
     
  9. Hi jinx,

    habe deinem Post zufolge wieder:
    Code:
    hinzugefügt. Das ganze Makro läuft jetzt in gut 30 Sekunden durch, damit ist mein Auftrag erfüllt ;-)
    Vielen Dank!
     
    OfficeUser321, 22. April 2009
    #9
  10. Hallo OfficeUser321,

    Warum geht Suchen&Ersetzen nicht?

    Probier mal

    Code:
    Grüße
    EarlFred
     
    EarlFred, 22. April 2009
    #10
  11. Hallo EarlFred,

    habe Deinen Code jetzt nicht ausprobiert. Ich meinte folgendes:
    Du nimmst einen Suchen&Ersetzen-Vorgang auf:
    Code:
    Dann strickt man das in sein Makro ein und ich gebe Dir Brief und Siegel, dass es nicht funktionieren wird. Warum, keine Ahnung. Wenn man einen "normalen" Formelbestandteil ändern will, kein Problem. #REF! mag er aber nicht. Wieso, keine Ahnung.
    Officeuser
     
    OfficeUser321, 23. April 2009
    #11
  12. Hallo Officeuser,

    dann hätte ich beides jetzt gerne per PM *wink.gif*

    Beim Deutschen Excel muss man freilich #Bezug! durch #Ref! im Code ersetzen, aber gehen tut es - warum allerdings nur bei mir und bei allen anderen nicht, kann ich auch nicht beantworten, vermutlich ist mein Excel kaputt *wink.gif*

    Aber für den unwahrscheinlichen Fall, dass es bei mir klappen sollte, wovon ich ausgehe, da ich es getestet habe, reicht mir bei rund 70 Tabellen und ca. 900 zu ersetzenden Einträgen pro Blatt rund eine Sekunde für einen gesamten Durchlauf.
    OK, aber da es bei Dir bereits ungetestet nicht geht, musst Du mit 30 Sekunden leben. Schade. *wink.gif*

    Grüße
    EarlFred
     
    EarlFred, 23. April 2009
    #12
Thema:

Makro ist brutal langsam

Die Seite wird geladen...
  1. Makro ist brutal langsam - Similar Threads - Makro brutal

  2. Makro aus personal.xls starten

    in Microsoft Excel Hilfe
    Makro aus personal.xls starten: Auf einem Arbeitsblatt habe ich mehrere Buttons. Die zugehörigen Makros sind in personal.xls gespeichert. Aus dem Code-Editor heraus kann ich die Makros ohne Problem starten. auf dem Arbeitsblatt...
  3. Dokumente und Blatt umbenennen

    in Microsoft Word Hilfe
    Dokumente und Blatt umbenennen: Ich lade mir jeden Tag csv-Dateien von meiner Bank herunter. Diese sind mit Datum versehen, also die Datei selbst und das erste Blatt, z.B. "Konto_13.02.2024". Wenn ich ein Makro erstelle, in dem...
  4. Speichern mit dem Titel der Zelle A2

    in Microsoft Excel Hilfe
    Speichern mit dem Titel der Zelle A2: Moin moin, Ich habe per Makro einen Arbeitsablauf aufgezeichnet der soweit auch funktioniert. Dieser Endet jedoch im "Speichern Unter" Fenster, welches durch das Klicken von "Drucken als PDF"...
  5. Barcode Scanliste Makro anpassen

    in Microsoft Excel Hilfe
    Barcode Scanliste Makro anpassen: Hallo zusammen! Einer der Mitglieder hier hat mir eine Funktionsliste erstellt, mit der man Barcodes scannt und danach einen Wert über die Bildschirmtastatur eingibt. Die Barcodes hatten bisher...
  6. Makro wird nicht angezeigt im Makro Auswahlfenster

    in Microsoft Excel Hilfe
    Makro wird nicht angezeigt im Makro Auswahlfenster: Hallo, wenn ich mein Makro ausführen möchte, öffnet sich das Makro Auswahlfenster. Allerdings wird das Makro nicht aufgelistet. Das Makro befindet sich in der PERSONAL.xlsb Arbeitsmappe. Die...
  7. Überprüfen ob Tabellenballt mit Namen aus Zelle vorhanden ist

    in Microsoft Excel Hilfe
    Überprüfen ob Tabellenballt mit Namen aus Zelle vorhanden ist: Da ich VBA noch nicht so lange benutze komme ich doch gerade an meine Grenzen. Ich möchte überprüfen ob es ein Bestimmtes Tabellenblatt gibt im Tabellenblatt "GK" in P1 steht der zu überprüfende...
  8. Makros für csv-Export mit Anführungszeichen für ausgewählte Splaten

    in Microsoft Excel Hilfe
    Makros für csv-Export mit Anführungszeichen für ausgewählte Splaten: Hallo liebe Forengemeinde, ich habe folgendes Problem: Ich muss eine csv-Datei bearbeiten und anschließend wieder als csv-Datei speichern. In der Originaldatei sind einige Spalteninhalte in in...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden