Access → Excel: Daten exportieren
Variante 1: DoCmd.TransferSpreadsheet
DoCmd.TransferSpreadsheet _
TransferType:=acExport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:="qryUmsatz", _
FileName:="C:\Export\Umsatz.xlsx", _
HasFieldNames:=True
Schnell. Einfach. Funktioniert für Abfragen und Tabellen.
Variante 2: Direkte Excel-Automation
Dim xlApp As Object, xlWb As Object
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Add
xlApp.Visible = True
xlWb.Sheets(1).Cells(1, 1).Value = "Hallo Excel"
xlWb.SaveAs "C:\Export\Direkt.xlsx"
xlWb.Close
xlApp.Quit
Set xlApp = Nothing
Für mehr Kontrolle über Layout und Format.
Access → Excel: Daten zeilenweise schreiben
Dim xlApp As Object, xlSheet As Object
Dim rs As DAO.Recordset, i As Long
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblKunden")
Set xlApp = CreateObject("Excel.Application")
Set xlSheet = xlApp.Workbooks.Add.Sheets(1)
For i = 0 To rs.Fields.Count - 1
xlSheet.Cells(1, i + 1).Value = rs.Fields(i).Name
Next
i = 2
Do Until rs.EOF
For j = 0 To rs.Fields.Count - 1
xlSheet.Cells(i, j + 1).Value = rs.Fields(j).Value
Next
i = i + 1
rs.MoveNext
Loop
xlApp.Visible = True
Ideal für eigene Exportlogik.
Access → Outlook: E-Mail senden
Dim olApp As Object, olMail As Object
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(0)
With olMail
.To = "kunde@example.com"
.Subject = "Ihre Rechnung"
.Body = "Sehr geehrter Kunde," & vbCrLf & "anbei Ihre Rechnung."
.Attachments.Add "C:\Export\Rechnung.pdf"
.Display ' oder .Send
End With
Funktioniert nur, wenn Outlook lokal installiert ist. Kein M365-Web.
Outlook → Access: Mails einlesen
Dim olApp As Object, olNs As Object, olFolder As Object, olMail As Object
Set olApp = CreateObject("Outlook.Application")
Set olNs = olApp.GetNamespace("MAPI")
Set olFolder = olNs.GetDefaultFolder(6) ' Posteingang
For Each olMail In olFolder.Items
If TypeName(olMail) = "MailItem" Then
Debug.Print olMail.Subject & " - " & olMail.ReceivedTime
End If
Next
Zum Beispiel für automatische Verarbeitung von Bestellungen oder Supportanfragen.
Access → Outlook-Kalender
Dim olApp As Object, olAppt As Object
Set olApp = CreateObject("Outlook.Application")
Set olAppt = olApp.CreateItem(1)
With olAppt
.Start = #5/15/2025 14:00#
.Duration = 60
.Subject = "Besprechung"
.Location = "Konferenzraum"
.ReminderMinutesBeforeStart = 15
.Save
End With
So kannst Du aus Access heraus Termine eintragen.
Daten aus Excel importieren
DoCmd.TransferSpreadsheet _
TransferType:=acImport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:="tmpImport", _
FileName:="C:\Import\Preise.xlsx", _
HasFieldNames:=True
Für kontrollierten Import: erst in temporäre Tabelle, dann prüfen und übernehmen.
Integrationstipps
- Office 32-Bit und 64-Bit prüfen – bei Automatisierung relevant
- Fehlerbehandlung immer mit einbauen
- Outlook-Referenzen nicht fest einbinden → Late Binding nutzen
- Hintergrundprozesse (z. B. Massenversand) mit
DoEvents
entlasten - Exporte sinnvoll benennen (
Bericht_20250501.xlsx
)
Beispiel: Serienmail mit Anhang aus Access
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT Email, PDFPfad FROM tblRechnungen WHERE Monat=4")
Do While Not rs.EOF
Set olMail = CreateObject("Outlook.Application").CreateItem(0)
With olMail
.To = rs!Email
.Subject = "Ihre April-Rechnung"
.Body = "Anbei Ihre Rechnung für April."
.Attachments.Add rs!PDFPfad
.Send
End With
rs.MoveNext
Loop
Funktioniert zuverlässig – aber nicht ohne Outlook-Trust-Center-Warnung, je nach Einstellung:
Die nervige Outlook-Warnung beim automatisierten Senden („Ein Programm versucht, E-Mail in Ihrem Namen zu senden…“) ist in KMU-Projekten mit Access und VBA immer wieder ein Thema.
Hier sind die Top 5 Möglichkeiten, um die Outlook-Trust-Center-Warnung zu vermeiden oder zu umgehen – inklusive technischer Hinweise:
1. Redemption Library (sicher und etabliert)
Redemption ist der Klassiker.
Ersetzt Outlook-Objekte durch sichere Wrapper und umgeht das Sicherheitsmodell.
Dim redApp As Object
Set redApp = CreateObject("Redemption.SafeOutlookApplication")
Dim redMail As Object
Set redMail = redApp.CreateItem(0)
With redMail
.Recipients.Add "test@example.com"
.Subject = "Ohne Warnung"
.Body = "Kein Trust Center Popup."
.Send
End With
Vorteile:
- Kein Popup
- Produktiv einsetzbar
- Auch für Anhänge, Kalender usw.
Nachteil:
- Extra DLL (muss registriert werden)
- Lizenzpflichtig (kommerziell)
2. Outlook im „Programmatic Access“ auf „Nie warnen“ setzen
Nur sinnvoll im Einzelplatzbetrieb, wenn der Rechner durchgehend Virenschutz hat.
Pfad:
Outlook → Datei → Optionen → Trust Center → Einstellungen für das Trust Center → Programmgesteuerter Zugriff
Option:
„Nie warnen (empfohlen, wenn ein Antivirenprogramm ausgeführt wird)“
Nachteil:
- Gilt nur lokal
- Keine Gruppenrichtlinie = kein zentrales Management
- Nicht verfügbar, wenn kein Antivirus erkannt wird
3. Signierte VBA-Makros und vertrauenswürdige Speicherorte
Wenn Du Deinen Code digital signierst und Access/Outlook entsprechend einstellst, werden Makros nicht mehr als unsicher eingestuft.
Schritte:
- Digitale Signatur erstellen (z. B. mit SelfCert.exe)
- Projekt signieren (VBA-Editor → Extras → Digitale Signatur)
- Pfad der Access-Datei als „vertrauenswürdiger Speicherort“ definieren
Effekt:
Outlook traut Deinem Code. Aber: nicht 100 % zuverlässig beim Mailversand.
4. Zwischenlösung: Mail per CDO oder SMTP
Ganz ohne Outlook. Du umgehst Outlook komplett, indem Du die Mail per SMTP verschickst – z. B. über den lokalen Mailserver oder Microsoft 365.
Dim cdoMsg As Object
Set cdoMsg = CreateObject("CDO.Message")
With cdoMsg
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "user@example.com"
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "passwort123"
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Configuration.Fields.Update
.To = "kunde@example.com"
.From = "user@example.com"
.Subject = "CDO-Mail"
.TextBody = "Ohne Outlook, ohne Warnung."
.Send
End With
Vorteile:
- Kein Outlook nötig
- Kein Popup
Nachteil:
- Etwas fummelig
- Zugangsdaten im Klartext
5. Gruppenrichtlinie (GPO) für Unternehmen
In größeren Umgebungen mit Active Directory kannst Du Outlooks Verhalten zentral steuern:
- Outlook Admin Templates (ADMX) einspielen
- „Programmatic Access Security“ über GPO konfigurieren
Pfad in der GPO:
Benutzerkonfiguration → Administrative Vorlagen → Microsoft Outlook [Version] → Sicherheitscenter → Einstellungen für programmgesteuerten Zugriff
Effekt:
- Kein Popup mehr, wenn eine vertrauenswürdige Anwendung Mails versendet
Nachteil:
- Nur mit Gruppenrichtlinien
- Gilt für alle Benutzer auf dem System
No responses yet