Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1740to1744
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

VBA-Perfomance und StandBy

VBA-Perfomance und StandBy
12.02.2020 14:23:27
AndyO
Hallo,
ich habe größere Liste mit jeweils ~10.000 Datensätzen zu korrelieren. Soweit mir bekannt ist VBA nicht multiprozessortauglich. D.h. Performancesteigerungen durch Hardware bringen nur bedingt etwas. Im Makro selbst sollte ich Grafikoperationen wie sheet.select vermeiden. Das umgehe ich mit worksheet.cells. Zwischendurch kommt mir auch der StandBy in die Quere. Mein Arbeitsrechner hängt an einer Softwareverteilplattform und ich kann keine zusätzliche SW installieren. Ich hab das Gefühl, dass die Abarbeitung im StandBy zum Erliegen kommt. Kann ich den StandBy-Zustand VBA-seitig verhindern? Habt ihr sonstige Vorschläge?
MfG
AndyO

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arrays
12.02.2020 14:31:21
Fennek
Hallo,
einzelne Zugriffe auf Zellen sind in VBA eher langsam, schneller wird es, wenn man zuerst alle relevanten Zellen auf einmal in ein Array lädt und dann alle Berechnungen im Array durchführt. Die Beschleunigung kann auch ein Faktor 100 sein.
Dann sollte auch Standby kein Problem sein. (oder über Windows abschalten/verlängern)
mfg
AW: VBA-Perfomance und StandBy
12.02.2020 17:44:32
Nepumuk
Hallo Andy,
ein Beispiel:
Option Explicit

Private Declare Sub SetThreadExecutionState Lib "kernel32.dll" ( _
    ByRef esFlags As EXECUTION_STATE)
Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Private Enum EXECUTION_STATE
    ES_SYSTEM_REQUIRED = &H1
    ES_DISPLAY_REQUIRED = &H2
    ES_USER_PRESENT = &H4
    ES_AWAYMODE_REQUIRED = &H40&
    ES_CONTINUOUS = &H80000000
End Enum

Public Sub Beispiel()
    
    Dim lngRow As Long
    
    'Energiesparmodus und Bildschirmschoner unterdruecken
    Call SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED Or _
        EXECUTION_STATE.ES_DISPLAY_REQUIRED Or EXECUTION_STATE.ES_CONTINUOUS)
    
    'nur damit Excel beschaeftigt ist
    For lngRow = 1 To Rows.Count
        Cells(lngRow, 1).Value = lngRow
        Call Sleep(100) 'damit es nicht ganz so schnell geht ;-)
    Next
    
    'Normalzustand des Rechners wiederherstellen
    Call SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS)
    
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA-Perfomance und StandBy
12.02.2020 23:08:21
Daniel
Hi
Ich habe meinen Rechner in den Energiesparoptionen so eingestellt, dass er im Netzbetrieb immer angeschaltet bleibt und auch kein Energiesparmodus aktiviert wird, lediglich die Bildschirm Abschaltung bleibt aktiv.
Dann kann man den Rechner auch mal über Nacht rödeln lassen.
Zum korrelieren von Datensätzen ist es oft hilfreich, diese nach dem ID-Begriff aufsteigend zu sortieren.
Dann kann man zum Suchen der Position einer ID die Funktion VERGLEICH (in VBA APPLICATION.MATCH) mit 3.Parameter =1 verwenden und die ist um Welten schneller als die normale Suche in unsortierten Listen.
Auch kann es beim Umgang mit solchen Listen nicht schaden, sich mal mit dem Dictionary-Obejekt vertraut zu machen, das erlaubt auch schnelles Arbeiten in großen Datenmengen.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige