Office: (Office 2016) Makro arbeitet sehr langsam

Helfe beim Thema Makro arbeitet sehr langsam in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Moin, ich habe mir ein etwas aufwändigeres Excel-Projekt selbst zugemutet. Ich habe eine Anwesenheitstabelle für meine Mitarbeiter erstellt, in der... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Andre R., 10. Februar 2018.

  1. Andre R. Neuer User

    Makro arbeitet sehr langsam


    Moin,

    ich habe mir ein etwas aufwändigeres Excel-Projekt selbst zugemutet. Ich habe eine Anwesenheitstabelle für meine Mitarbeiter erstellt, in der die Teamsprecher täglich die anwesenden Kollegen eintragen, damit ich diese Daten in unser Arbeitszeitsystem übernehmen kann. Außerdem dient diese Datei im ernst Fall als Evakuierungsliste.
    Grundsätzlich arbeiten wir mit 2 Schichten im 3-Schichtbetrieb (24h / 6 Tage pro Woche). Also werden aus beiden Schichten Mitarbeiter zur Nachtschicht eingeteilt. (Nur zur Erklärung, da die Datei für außenstehende etwas undurchsichtlich wirken kannMakro arbeitet sehr langsam :rolleyes:).
    Ich habe die gewünschten Makros selbst geschrieben und diese funktionieren auch soweit recht gut. Ich kann per Knopfdruck Sicherungs-PDF´s an einen vorgegebenden Ort speichern, die Anfangs- und Endzeit wird automatisch gesetzt, wenn der Teamsprecher den Kollegen als anwesend markiert. Mein "Problem-Makro" ist eher das ein- und ausblenden der unterschiedlichen Schichten (Früh-, Spät- und Nachtschicht). Zu allem Überfluss haben wir zwei unterschiedliche Frühschichtmodelle, zwei unterschiedliche Spätschichtmodelle und fünf (!!!) unterschiedliche Nachtschichtmodelle. Dann gibt es noch die Möglichkeit in versetzter Schicht (im Code "VER" genannt) zu arbeiten. Die Suche nach den jeweiligen Modellen (gerade die Nachtschicht) dauert bis zu 120 Sekunden.
    Weiter unten seht ihr mein Code zum einblenden der Frühschicht. Gibt es eine Möglichkeit dies zu beschleunigen?

    Des Weiteren suche ich immer in den Spalten nach den heutigen Datum und blende dann die gewünschte Schicht für den Tag ein. Da wir aber am Wochenende nicht immer alle Mitarbeiter anwesend haben, würden diese raus fallen und mit ausgeblendet werden. Ich hätte gern das nach der Kalenderwoche oder nach einem vorgegebenen Datum gesucht wird. Könnt ihr mir da helfen?

    Private Sub CommandButton7_Click()
    'Frühschicht raus filtern
    Dim x
    Dim y
    With ActiveSheet
    For x = 6 To 500 Step 9
    For y = 5 To 33 Step 1
    If Cells(x - 1, y) = Date Then
    If Cells(x, y) = "F1" Then
    Rows(x - 3).Hidden = False
    Rows(x - 2).Hidden = False
    Rows(x - 1).Hidden = False
    Rows(x).Hidden = False
    Rows(x + 1).Hidden = False
    Rows(x + 2).Hidden = False
    Rows(x + 3).Hidden = False
    Rows(x + 4).Hidden = False
    Rows(x + 5).Hidden = False
    Else
    If Cells(x, y) = "F2" Then
    Rows(x - 3).Hidden = False
    Rows(x - 2).Hidden = False
    Rows(x - 1).Hidden = False
    Rows(x).Hidden = False
    Rows(x + 1).Hidden = False
    Rows(x + 2).Hidden = False
    Rows(x + 3).Hidden = False
    Rows(x + 4).Hidden = False
    Rows(x + 5).Hidden = False
    Else
    If Cells(x, y) = "VER" Then
    Rows(x - 3).Hidden = False
    Rows(x - 2).Hidden = False
    Rows(x - 1).Hidden = False
    Rows(x).Hidden = False
    Rows(x + 1).Hidden = False
    Rows(x + 2).Hidden = False
    Rows(x + 3).Hidden = False
    Rows(x + 4).Hidden = False
    Rows(x + 5).Hidden = False
    Else
    Rows(x - 3).Hidden = True
    Rows(x - 2).Hidden = True
    Rows(x - 1).Hidden = True
    Rows(x).Hidden = True
    Rows(x + 1).Hidden = True
    Rows(x + 2).Hidden = True
    Rows(x + 3).Hidden = True
    Rows(x + 4).Hidden = True
    Rows(x + 5).Hidden = True
    End If
    End If
    End If
    End If
    Next y
    Next x
    End With
    Unload Schichtauswahl
    'getestet und läuft
    End Sub



    Gruß AndreMakro arbeitet sehr langsam :confused:
     
    Andre R., 10. Februar 2018
    #1
  2. maninweb
    maninweb MVP für Microsoft Excel
    Hallo,

    Du könntest versuchen, ob das Ausschalten der Bildschirmaktualisierung eine leichte Besserung bringt.

    Code:
    Private Sub CommandButton7_Click()
      
      Dim x As Long
      Dim y As Long
      
      Application.ScreenUpdating = False
      
    ' :
    ' Dein Code
    ' :
      
      Application.ScreenUpdating = True
      
      Unload Schichtauswahl
    
    End Sub
    Allerdings ist anzumerken, dass in den neueren Excel-Version das zeilenweise Ein- und Ausblenden elendig langsam ist. Besser wäre es, wenn Du z.B. per Formel in einer Hilfspalte einen Wert errechnest, den Du per AutoFilter steuern kannst. Z.B. pro Zeile Frühschicht = 1, pro Zeile Spätschicht = 2 usw. Einen solchen AutoFilter kannst Du auch per Code steuern und das ist wesentlich schneller.

    Gruß
     
    maninweb, 12. Februar 2018
    #2
  3. Andre R. Neuer User
    Hey,

    vielen Danke für die Hilfe.
    ich hab deine Idee eingebaut, funktioniert soweit, bringt jedoch nicht die enorme Verbesserung.
    Ich experimentiere nebenbei auch weiter herum.

    Mein Ansatz das Makro zu beschleunigen ist zur Zeit, dass das Makro nicht mehr jeder Zeile und Spalte erneut nach dem Datum durch suchen soll, sondern dass nur noch in der Spalte nach den Ausdrücken "F1" oder "F2" in denen das heutige Datum steht.

    im Code ausgedrückt:

    Private Sub CommandButton8_Click()
    'Spätschicht raus filtern
    Dim x As Long
    Dim y As Long
    Dim z
    Dim i As Range
    For x = 6 To 497 Step 9
    For z = x - 3 To x + 5
    For y = i To lastrange 'hier soll aus der Variablen "i" der Variable "y" werden
    Set i = ActiveSheet.Rows(5).Find(what:=Date, lookat:=xlWhole) 'hier soll nach dem Datum gesucht werden
    If Cells(x + 2, y) = "F1" Then 'hier wird schon ein Fehler ausgeworfen...wen wundert es...
    Rows(z).Hidden = False
    Else
    If Cells(x + 2, y) = "F2" Then
    Rows(z).Hidden = False
    Else
    If Cells(x + 2, y) = "VER" Then
    Rows(z).Hidden = False
    Else
    Rows(z).Hidden = True
    End If
    End If
    End If
    Next y
    Next z
    Next x
    Unload Schichtauswahl
    'wird getestet
    End Sub

    Der Code befindet sich noch im "aufbau"... habe aber das gefühl, dass ich mich im Kreis drehe...

    Gruß Andre
     
    Andre R., 12. Februar 2018
    #3
  4. maninweb
    maninweb MVP für Microsoft Excel

    Makro arbeitet sehr langsam

    Hallo,

    wie gesagt, ein AutoFilter könnte die schnellste Variante sein. Google mal nach excel vba autofilter.

    Gruß
     
    maninweb, 12. Februar 2018
    #4
  5. Exl121150 Erfahrener User
    Hallo Andre,

    ausgehend von deinem 1. Code habe ich folgende Modifikation erstellt:
    Code:
    Option Explicit
    
    Private Sub CommandButton7_Click()
     'Frühschicht raus filtern
     
      Dim x As Integer, y As Integer
      Dim VonBisZeilen As String
      Dim HeuteDatum As Date
      
      'Zelle A1 (bzw. irgendeine andere Zelle) enthält
      'Abfragedatum (statt des HEUTE()-Datums)
      HeuteDatum = Range("A1").Value
      
      
      With ActiveSheet
        For x = 6 To 500 Step 9
        
          'VonBisZeilen-Bereich (x-3) bis (x+5) soll ein/aus-geblendet werden:
          'Berechne diesen Bereich in der Variablen "VonBisZeilen":
          VonBisZeilen = (x - 3) & ":" & (x + 5)
          
          'VonBisZeilen-Bereich soll grundsätzlich ausgeblendet sein;
          'Tue das mit einem Befehl statt mit 9 Befehlen:
          .Rows(VonBisZeilen).Hidden = True
            
          For y = 5 To 33 'Step 1
          
            'Dieser VonBisZeilen-Bereich wird nur dann eingeblendet,
            'wenn in der (y).Spalte zum 1.Mal Folgendes gleichzeitig eintritt:
            '  - in der (x-1).Zeile steht das heutige Datum (bzw. ein Datum)
            '  - in der (x).  Zeile steht einer der 3 Werte "F1","F2","VER"
            
            If .Cells(x - 1, y).Value = HeuteDatum Then
              Select Case .Cells(x, y).Value
                Case "F1", "F2", "VER"
                     'Blende VonBisZeilen-Bereich ein:
                     .Rows(VonBisZeilen).Hidden = False
                     'Verlasse y-Schleife, denn mehr als eingeblendet
                     'kann der VonBisZeilen-Bereich nicht werden
                     Exit For
                Case Else
                     'Tue nichts - oder eventuell sonst etwas
              End Select
            End If
            
          Next y
          
        Next x
        
      End With
      
      Unload Schichtauswahl
      'getestet und läuft
     End Sub
    
    Ich habe dir einigen Kommentar eingefügt, um meine Idee dahinter zu erläutern.
    Ferner habe ich in diesem Vorschlag die Zelle A1 dazu verwendet, dort ein anderes Datum für die Abfrage zu verwenden anstelle des HEUTE()-Datums (=Date). Falls diese Zelle für dich ungünstig ist, müsstest du diese Zelle wo anders platzieren und natürlich den Code am Anfang von
    HeuteDatum = Range("A1").Value
    auf
    HeuteDatum = Range("E1").Value
    falls Zelle E1 günstiger wäre (... oder eben sonst eine Zelle).

    Ich konnte das Makro nur grob testen, da mir deine Echtdaten fehlen. Aber ich hoffe zumindest, dass es so jetzt schneller ist.
     
    Exl121150, 13. Februar 2018
    #5
Thema:

Makro arbeitet sehr langsam

Die Seite wird geladen...
  1. Makro arbeitet sehr langsam - Similar Threads - Makro arbeitet

  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. Makro arbeitet auf anderem PC nicht ordnungsgemäß

    in Microsoft Excel Hilfe
    Makro arbeitet auf anderem PC nicht ordnungsgemäß: Ich habe einen Makro geschrieben, der 2 Diagramme aus einem Datensatz erstellen soll. Der Datensatz sieht folgendermaßen aus: Zeile 1 Titelzeile Zeilen 2 bis 3 Daten Diagramm 1 Zeile...
Schlagworte:
  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