ADO in geschlossene Arbeitsmappe schreiben
Schritt-für-Schritt-Anleitung
Um mit ADO Excel Daten in eine geschlossene Datei zu schreiben, kannst du den folgenden VBA-Code verwenden. Dieser Code öffnet die geschlossene Arbeitsmappe im Hintergrund und schreibt eine Seriennummer in die vorgegebene Zelle:
-
Öffne Excel und drücke ALT + F11
, um den VBA-Editor zu öffnen.
-
Füge ein neues Modul hinzu (Einfügen > Modul
).
-
Kopiere den nachstehenden Code in das Modul:
Public Sub ADO_Write()
Dim objConnection As Object
Dim strConnection As String
Dim strWorkbook As String, strWorksheet As String
Dim Seriennummer As String
strWorkbook = "C:\Datenbank\Mappe1.xls" ' Pfad zur Zielarbeitsmappe
strWorksheet = "Tabelle2" ' Name des Arbeitsblattes
Seriennummer = ThisWorkbook.Worksheets("Tabelle3").Range("A1").Value ' Wert aus der aktuellen Arbeitsmappe
Set objConnection = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strWorkbook & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes;IMEX=0"""
Call objConnection.Open(strConnection)
Call objConnection.Execute("INSERT INTO [" & strWorksheet & "$A2:A2] VALUES ('" & Seriennummer & "')")
objConnection.Close
Set objConnection = Nothing
End Sub
-
Passe den strWorkbook
-Pfad und den strWorksheet
-Namen nach Bedarf an.
-
Führe das Makro aus, um die Seriennummer in die geschlossene Arbeitsmappe zu schreiben.
Häufige Fehler und Lösungen
Alternative Methoden
Falls du nicht mit ADO arbeiten möchtest, kannst du auch die folgende Methode verwenden, um Excel VBA Daten in eine geschlossene Datei zu schreiben:
Application.ScreenUpdate = False
Workbooks.Open "C:\Datenbank\Mappe1.xls"
With ActiveWorkbook
.Sheets("Tabelle2").Range("A2").Value = ThisWorkbook.Worksheets("Tabelle3").Range("A1").Value
.Close SaveChanges:=True
End With
Application.ScreenUpdate = True
Diese Methode öffnet die Datei, schreibt die Daten und schließt sie wieder, ohne dass der Benutzer etwas sieht.
Praktische Beispiele
Hier ist ein Beispiel, wie du den ADO-Code anpassen kannst, um mehrere Werte in verschiedene Zellen zu schreiben:
Public Sub ADO_Write_Multiple()
Dim objConnection As Object
Dim strConnection As String
Dim strWorkbook As String, strWorksheet As String
Dim Seriennummer As String
Dim i As Integer
strWorkbook = "C:\Datenbank\Mappe1.xls"
strWorksheet = "Tabelle2"
Set objConnection = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strWorkbook & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes;IMEX=0"""
Call objConnection.Open(strConnection)
For i = 1 To 10
Seriennummer = ThisWorkbook.Worksheets("Tabelle3").Cells(i, 1).Value
Call objConnection.Execute("INSERT INTO [" & strWorksheet & "$A" & (i + 1) & ":A" & (i + 1) & "] VALUES ('" & Seriennummer & "')")
Next i
objConnection.Close
Set objConnection = Nothing
End Sub
Diese Methode schreibst die Werte von A1
bis A10
in die geschlossene Datei.
Tipps für Profis
- Vermeide es, die Datei unnötig oft zu öffnen, da dies die Performance beeinträchtigen kann.
- Nutze Transaktionen, wenn du mehrere Schreibvorgänge in einer einzigen Sitzung durchführst.
- Setze die
ScreenUpdating
-Eigenschaft auf False
, um das Flackern des Bildschirms zu vermeiden und die Ausführung zu beschleunigen.
FAQ: Häufige Fragen
1. Muss die Datei unbedingt geschlossen sein?
Ja, die Verwendung von ADO funktioniert am besten mit geschlossenen Arbeitsmappen, um die Performance zu verbessern und Konflikte zu vermeiden.
2. Welche Excel-Version benötige ich für ADO?
ADO ist in den meisten aktuellen Versionen von Excel verfügbar. Stelle sicher, dass du die richtige OLEDB-Provider-Version installierst, um mit der jeweiligen Excel-Datei zu arbeiten (z.B. .xls
, .xlsx
).
3. Wie kann ich Daten aus einer geschlossenen Datei lesen?
Du kannst den ADO-Befehl SELECT
verwenden, um Daten aus einer geschlossenen Arbeitsmappe zu lesen, ähnlich wie beim Schreiben von Daten.