Wie nutze ich Large Address Aware-UnterstĂŒtzung fĂŒr speicherintensive Prozesse in VBA?

Wenn Du mit speicherintensiven Anwendungen in Microsoft Access arbeitest – z. B. bei der Verarbeitung großer Datenmengen, umfangreichen Berechnungen oder Bildverarbeitung – stĂ¶ĂŸt Du mit klassischem 32-Bit-VBA schnell an die Speichergrenzen. StandardmĂ€ĂŸig kann ein 32-Bit-Prozess maximal 2 GB adressieren – unabhĂ€ngig davon, wie viel RAM Dein PC wirklich hat.

Mit Large Address Aware (LAA) mehr RAM fĂŒr Access-VBA nutzen

Dank Large Address Aware (LAA) kann ein 32-Bit-Prozess unter einem 64-Bit-Windows-System bis zu 4 GB RAM adressieren – wenn die Anwendung dafĂŒr vorbereitet ist. Access (und andere Office-Programme) unterstĂŒtzen dies ab Access 2016 (Build 16.0.8431.2046) offiziell. Voraussetzung: Du nutzt entweder:

  • Access 64-Bit (dann entfĂ€llt LAA, da sowieso bis zu 8 TB RAM adressiert werden können),
  • oder Access 32-Bit, aber als Large Address Aware kompiliert.

Microsoft hat Access standardmĂ€ĂŸig als LAA-kompatibel markiert. Das bedeutet, Du kannst diese UnterstĂŒtzung sofort nutzen – ohne das EXE-File patchen zu mĂŒssen.

Warum das wichtig ist

In vielen Automatisierungs- und Analyseprozessen mit Access VBA kommt es zu Out of Memory Errors, obwohl der Rechner ĂŒber reichlich RAM verfĂŒgt. GrĂŒnde dafĂŒr:

  • Große DAO/ADO-Recordsets
  • Bildverarbeitung in Formularen oder Berichten
  • Massenhafte Verarbeitung großer Excel-Dateien
  • TemporĂ€re Objekte in langen VBA-Schleifen

Mit LAA kannst Du diesen Speicherbedarf besser abfangen.

Beispiel: Speicherauslastung beim Einlesen großer Excel-Dateien reduzieren

Hier ein vereinfachtes Beispiel, das zeigt, wie Du bei großen Excel-Dateien bewusster mit dem Speicher arbeitest – und wie LAA in Kombination mit sauberem Speicher-Management helfen kann.

Sub ImportiereGrosseExcelDatei()
    Dim xlApp As Object
    Dim xlWb As Object
    Dim xlWs As Object
    Dim i As Long
    Dim letzteZeile As Long
    Dim rs As DAO.Recordset
    Dim db As DAO.Database

    On Error GoTo Fehler

    Set db = CurrentDb
    Set rs = db.OpenRecordset("tbl_Import", dbOpenDynaset)

    ' Excel öffnen (nicht sichtbar)
    Set xlApp = CreateObject("Excel.Application")
    Set xlWb = xlApp.Workbooks.Open("C:\Temp\grosse_datei.xlsx")
    Set xlWs = xlWb.Sheets(1)

    letzteZeile = xlWs.Cells(xlWs.Rows.Count, 1).End(-4162).Row ' xlUp = -4162

    For i = 2 To letzteZeile
        rs.AddNew
        rs!Feld1 = xlWs.Cells(i, 1).Value
        rs!Feld2 = xlWs.Cells(i, 2).Value
        rs.Update
        
        If i Mod 1000 = 0 Then
            DoEvents  ' Speicher freigeben, UI nicht blockieren
        End If
    Next i

    MsgBox "Import abgeschlossen: " & (letzteZeile - 1) & " Zeilen.", vbInformation

Aufraeumen:
    If Not rs Is Nothing Then rs.Close: Set rs = Nothing
    If Not xlWb Is Nothing Then xlWb.Close False: Set xlWb = Nothing
    If Not xlApp Is Nothing Then xlApp.Quit: Set xlApp = Nothing
    Set db = Nothing
    Exit Sub

Fehler:
    MsgBox "Fehler: " & Err.Number & " - " & Err.Description, vbCritical
    Resume Aufraeumen
End Sub

Tipps fĂŒr speicherintensive Prozesse

Auch mit LAA solltest Du speicherschonend programmieren:

✅ Große Objekte sofort freigeben
✅ DoEvents oder Sleep in langen Schleifen verwenden
✅ Recordsets frĂŒhzeitig schließen
✅ Keine riesigen Arrays in RAM puffern – besser zeilenweise arbeiten
✅ Debug.Print vermeiden bei Millionen von Iterationen

Wie ĂŒberprĂŒfe ich, ob Access LAA unterstĂŒtzt?

Du kannst mit einem Tool wie CFF Explorer prĂŒfen, ob die Datei MSACCESS.EXE das LAA-Flag (0x20) gesetzt hat. Microsoft hat dies aber seit Office 2016 in allen 32-Bit-Versionen aktiviert.

Alternativ kannst Du es programmatisch testen:

Private Declare PtrSafe Function GetProcessHeap Lib "kernel32" () As LongPtr

Sub TesteLAA()
    MsgBox "Access ist " & IIf(LenB(GetProcessHeap()) > 0, "LAA-kompatibel", "nicht LAA-kompatibel")
End Sub

(Achtung: Funktioniert nur unter 64-Bit-Windows.)

Fazit

Mit der Large Address Aware-UnterstĂŒtzung kannst Du aus 32-Bit-VBA deutlich mehr herausholen – insbesondere bei speicherintensiven Operationen. In vielen Access-Projekten kann das den Unterschied machen zwischen einem stabilen Importprozess und einem Absturz mit „Nicht genĂŒgend Speicher“.

👉 Achte dennoch auf gutes Speicher-Management. LAA ist kein Freibrief, sondern ein mĂ€chtiges Werkzeug im Zusammenspiel mit sauberem VBA-Code.

Hast Du Fragen zu speicherintensiven VBA-Prozessen oder brauchst Hilfe bei Optimierung und Automatisierung? Schreib mir gern – ich bin fĂŒr Dich da!

🐑 DatenschĂ€fer – Analyse, Auswertung und Automatisierung fĂŒr KMU im Norden
✉ Kontakt ĂŒber sesoft.de | 📊 Access · VBA · SQL · Power Platform

Kategorien:

Schlagwörter:

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert