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
Keine Antworten