Warum überhaupt sicher?
Excel-Daten sind fehleranfällig.
Leere Zeilen, merkwürdige Formate, Text statt Zahlen.
Wenn Du das blind in SQL schiebst, hast Du bald mehr Chaos als Daten.
Ich zeige Dir, wie Du das kontrolliert, strukturiert und wiederholbar machst – mit VBA.
Grundidee: Erst prüfen, dann laden
Vorgehensweise
- Excel-Datei analysieren
- Struktur validieren
- Temporär Importieren
- In Zieltabelle verschieben
- Fehler protokollieren
Vorbereitung: Verbindung zu SQL Server
Stell zuerst die Verbindung her.
Public Function GetSQLConnection() As Object
Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;" & _
"Data Source=DEIN_SQLSERVER;" & _
"Initial Catalog=DEINE_DATENBANK;" & _
"Integrated Security=SSPI;"
Set GetSQLConnection = conn
End Function
Schritt 1: Excel-Datei öffnen und prüfen
Public Function PrüfeExcelPfad(pfad As String) As Boolean
If Dir(pfad) = "" Then
MsgBox "Datei nicht gefunden: " & pfad
PrüfeExcelPfad = False
Else
PrüfeExcelPfad = True
End If
End Function
Schritt 2: Import in temporäre Tabelle
Ich empfehle, immer zuerst in eine temporäre Importtabelle zu schreiben.
Dann kannst Du Spalten prüfen, Datentypen kontrollieren, Dubletten vermeiden.
Public Sub ImportiereExcel(pfad As String)
Dim sql As String
sql = "SELECT * INTO dbo.ExcelImport_Temp FROM " & _
"OPENROWSET('Microsoft.ACE.OLEDB.12.0'," & _
"'Excel 12.0 Xml;HDR=YES;IMEX=1;Database=" & pfad & "'," & _
"'SELECT * FROM [Tabelle1$]')"
Dim conn As Object
Set conn = GetSQLConnection()
conn.Execute "IF OBJECT_ID('dbo.ExcelImport_Temp') IS NOT NULL DROP TABLE dbo.ExcelImport_Temp"
conn.Execute sql
conn.Close
End Sub
Schritt 3: Validierung
Du prüfst nun auf Pflichtfelder, Formate oder Dubletten.
Public Sub ValidierungStarten()
Dim conn As Object, rs As Object
Set conn = GetSQLConnection()
Set rs = conn.Execute("SELECT COUNT(*) AS Fehler FROM dbo.ExcelImport_Temp WHERE Artikelnummer IS NULL")
If rs!Fehler > 0 Then
MsgBox rs!Fehler & " Datensätze ohne Artikelnummer."
Else
MsgBox "Alle Pflichtfelder vorhanden."
End If
rs.Close: conn.Close
End Sub
Schritt 4: Daten verschieben
Nur gültige Datensätze landen in der Zieltabelle.
Public Sub ÜbernehmeGültigeDaten()
Dim conn As Object
Set conn = GetSQLConnection()
conn.Execute "INSERT INTO dbo.Artikel (Artikelnummer, Bezeichnung, Preis) " & _
"SELECT Artikelnummer, Bezeichnung, Preis " & _
"FROM dbo.ExcelImport_Temp " & _
"WHERE Artikelnummer IS NOT NULL"
conn.Close
End Sub
Schritt 5: Aufräumen und protokollieren
Lösch die temporäre Tabelle, oder führ ein Protokoll.
Public Sub Aufräumen()
Dim conn As Object
Set conn = GetSQLConnection()
conn.Execute "DROP TABLE dbo.ExcelImport_Temp"
conn.Close
End Sub
Typische Fehlerquellen
- Zellformatierungen (Text statt Zahl)
- Leere Zeilen oder Spalten
- Nicht definierte Tabellenblätter
- Excel-Datei offen beim Import
Meine Empfehlung
Lass Excel nie direkt in SQL schreiben.
Baue Dir eine Importstrecke mit Prüfung, Logging und Feedback.
Dann kannst Du das Ganze auch jemandem übergeben, der keine Ahnung von SQL hat.