Thema Datum  Von Nutzer Rating
Antwort
05.10.2020 13:43:00 Tony
NotSolved
05.10.2020 13:58:10 Gast14599
NotSolved
05.10.2020 14:05:39 Tony
NotSolved
Blau Datei auf einmal extrem langsam
05.10.2020 14:58:25 Gast31545
NotSolved
05.10.2020 16:08:55 Gast66269
NotSolved
05.10.2020 16:10:13 Gast71183
NotSolved

Ansicht des Beitrags:
Von:
Gast31545
Datum:
05.10.2020 14:58:25
Views:
512
Rating: Antwort:
  Ja
Thema:
Datei auf einmal extrem langsam

Aha ok, "Synesty" war mir bis gerade eben noch nicht bekannt. Nun weiß ich aber worum es geht. ;)

50 Zeilen nur? Dann scheint etwas faul zu sein.

1) Bedinge Formatierungen können die Mappe schnell aufblähen und langsamer machen. Kontrollier mal wieviele aktiv sind, welche davon notwendig sind, aber am besten wäre sie (testweise) mal raus zu nehmen.

2) Allgemein würde ich vorschlagen, in jeder der Funktionen/Prozeduren am Anfang und Ende eine Debug-Zeile einzufügen die Zeit und den Namen jener ausgibt. So könnte man herausfinden welche davon viel Zeit beansprucht.

3)

 Function getEAN(ByRef bError As Boolean) As String
    On Error GoTo Err_Handler
    Dim wbk As Workbook
    Dim wsh As Worksheet
    Dim rngEAN As Range
    bError = False
    Set wbk = GetWorkbook(ThisWorkbook.Path & "\EAN.xlsx")
    Set wsh = wbk.Worksheets(1)
    For Each rngEAN In Intersect(wsh.UsedRange, wsh.Range("A:A")).Cells
        If IsNumeric(rngEAN.Value) Then
            getEAN = rngEAN.Value
            rngEAN.ClearContents
            wbk.Save
            Exit For
        End If
    Next
    wbk.Close
Err_Exit:
    Exit Function
Err_Handler:
    Err.Clear
    bError = True
    Resume Err_Exit
End Function

Intersect ist langsam. An der Stelle macht es auch nicht viel Sinn. Scheinbar wird hierrüber im verwendeten Bereich nur die Spalte A benötigt.

Außerdem: Ist die Spalte A nicht Teil des verwendeten Bereichs, dann kommt es an der Stelle zu einem Laufzeitfehler - unnötig.

Besser wäre, man sagt wo die Daten Anfangen (z.B. A1) und schaut dann von unten nach oben wo die letzte Zeile ist - das ist der übliche Weg.

  Dim rngBereich As Excel.Range
  
  With Worksheets("Tabelle1")
    Set rngBereich = .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
    If rngBereich.Row < .Range("A1").Row Then
      'oberhalb des gültigen Bereichs gelandet -> keine Daten vorhanden
      Exit Sub
    ElseIf rngBereich.Rows.Count = 1 And rngBereich.Cells(1).Value = "" Then
      'keine Daten vorhanden
      Exit Sub
    Else
      'Daten vorhanden
    End If
  End With
  
  'weitere Aktionen mit Daten durchführen
  '...

4) Anweisungen wie diese

ws.Range("D" & (ActiveCell.Row)).Select
externalId = ActiveCell.Value

bremsen aus. Ein selektieren ist aus Nutzersicht nötig, aus Sicht eines Makros jedoch nicht.

Man kann derartige Zeilen aus Select und z.B. ActiveCell zusammenfassen zu:

externalId = ws.Range("D" & (ActiveCell.Row)).Value

5) Das Übertragungsprotokoll setzt, wie man sehen kann, auf JSON weshalb eine entspr. Implementierung in VBA erforderlich ist - deshalb der JsonConverter. Die Frage die hier im Raum schwebt ist, wie groß ist deren Laufzeit.

Das führt dann wieder zum Punkt 2) und dem dort erwähnte Debugging. Einfach um mal eine Vorstellung davon zu bekommen in welcher Func/Sub die meiste Zeit verloren geht. Es könnte beim Erzeugen / Übertragen / Lesen der Daten der Fall sein.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
05.10.2020 13:43:00 Tony
NotSolved
05.10.2020 13:58:10 Gast14599
NotSolved
05.10.2020 14:05:39 Tony
NotSolved
Blau Datei auf einmal extrem langsam
05.10.2020 14:58:25 Gast31545
NotSolved
05.10.2020 16:08:55 Gast66269
NotSolved
05.10.2020 16:10:13 Gast71183
NotSolved