Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1568to1572
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Export Excell Tabelle per VBA

Export Excell Tabelle per VBA
02.08.2017 10:05:10
Henry
Guten Morgen Zusammen,
Es geht um Berichte die täglich erstellt werden und als Ergebnistabellen in Excel erstellt werden. Da es täglich mehrere Dateien sind würde ich ungern für jede Datei Access öffnen und importieren wollen.
Daher habe ich gehofft es gibt eine Möglichkeit von Excel per VBA in eine bestehende Access Datenbank direkt zu exportieren. Dazu habe folgenden Code gefunden.
Hier ist der Bereich der Überschriften deklariert und die länge der Tabelle wird ermittelt. Das sieht ganz gut aus und beim Themenstarter hat es anscheinend funktioniert.. http://www.office-loesung.de/ftopic95185_0_0_asc.php
Wenn ich den Code ausführe erhalte ich den Fehler "Nicht erkennbares Datenbankformat"
Meine Access ist eine accdb Datei statt mdb.
Anpassungen in den Ranges und Pfad habe ich natürlich gemacht.
Kann jemand helfen?
Option Explicit

Sub TEST02_DB_import()
Dim ADOC As ADODB.Connection
Dim DBS As ADODB.Recordset
Dim lngZeile As Long, intIndex As Integer
Dim arNamen As Variant
On Error GoTo Fehler
Set ADOC = New ADODB.Connection
With ADOC
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open "e:\daten\excel\zahlen.mdb"
End With
Set DBS = New ADODB.Recordset
DBS.Open "Zahlen", ADOC, adOpenKeyset, adLockOptimistic
With Sheets("Importliste")
arNamen = .Range(.Range("A8"), .Range("A8").End(xlToRight))
For lngZeile = 9 To .Range("A9").End(xlDown).Row
DBS.AddNew
For intIndex = 1 To UBound(arNamen, 2)
DBS.Fields(arNamen(1, intIndex)) = .Cells(lngZeile, intIndex).Value
Next
DBS.Update
Next
End With
Fehler:
If Err.Number Then MsgBox Err.Description, , Err.Number
DBS.Close
ADOC.Close
Set ADOC = Nothing
Set DBS = Nothing
End 

Sub


		

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Export Excell Tabelle per VBA
02.08.2017 10:37:15
Henry
ich konnte jetzt folgenden Code finden der auch funktioniert.
Leider ist der sehr unpraktisch da man jedes Feld / Spalte einzeln übergeben muss statt die ganze Zeile. Alle Spalten von A bis EH hier zu deklarieren ist mehr als unschön.
Gibt es eine alternative zu .fields ?
Die Überschriften und Spaltenzuordnungen sind immer gleich und die Tabelle beginnt immer in Zeile 2 bis xx.
Sub ExcelToAccessAdo()
Dim cn As ADODB.Connection, rs As ADODB.Recordset, row As Long
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=h:\DatabaseExport.accdb;"
' open a recordset
Set rs = New ADODB.Recordset
rs.Open "GPR", cn, adOpenKeyset, adLockOptimistic, adCmdTable
row = 2   ' the start row in the worksheet
Do While Not IsEmpty(Worksheets(1).Range("A" & row))
With rs
.AddNew    ' create a new record
.Fields("Voyage") = Worksheets(1).Range("A" & row).Value
.Fields("Container") = Worksheets(1).Range("B" & row).Value
.Fields("V/L") = Worksheets(1).Range("C" & row).Value
.Fields("Standzeit VK") = Worksheets(1).Range("D" & row).Value
.Fields("Standzeit EK") = Worksheets(1).Range("E" & row).Value
.Update
End With
row = row + 1
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub

Anzeige
AW: Export Excell Tabelle per VBA
02.08.2017 10:50:24
Luschi
Hallo Henry,
Excel-Vba kennt seit einigen Versionen die Methode 'CopyFromRecordset':
siehe: https://msdn.microsoft.com/de-de/library/office/ff839240.aspx
Gruß von Luschi
aus klein-Paris
AW: Export Excell Tabelle per VBA
02.08.2017 10:58:27
Robert
Hallo Henry,
wenn die Anzahl und die Reihenfolge der Spalten in Deiner Excel-Tabelle und der Access-Datenbank übereinstimmen könntest Du die einzelnen fields-Zuweisungen ähnlich wie in Deinem ersten geposteten Code wie folgt ersetzen:
For i = 0 To (.fields.Count - 1)
.fields(i) = Worksheets(1).Cells(i + 1, row).Value
Next
Probiere das mal aus, ich habe das hier nicht getestet.
Gruß
Robert
Anzeige
AW: Export Excell Tabelle per VBA
02.08.2017 12:02:37
Henry
Hallo Werner, Luschi,
vielen Dank für die Hilfe.
@ Werner, das geht so wie du beschrieben hast.
Hab inzwischen im Netz einen VBA gefunden bei dem ich noch einen ErrorHandler eingefügt habe weil
beim exportieren Fehler 3265 kam.
Anbei der letzte Code falls jemand von Excel an Access End Sub
Sub PushTableToAccess()
On Error GoTo ErrorHandling
Const TARGET_DB = "DatabaseExport.accdb"
Dim cnn As ADODB.Connection
Dim MyConn
Dim rst As ADODB.Recordset
Dim I As Long, j As Long
Dim Rw As Long
Sheets(1).Activate 'Replace the 'Sheet Name' with your Excel Sheet name
Rw = Range("A65536").End(xlUp).Row
Set cnn = New ADODB.Connection
MyConn = "h:\DatabaseExport.accdb"
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
End With
'Replace the 'tblMyExcelUpload' with your table name in Access
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
rst.Open Source:="GPR", ActiveConnection:=cnn, _
CursorType:=adOpenDynamic, LockType:=adLockOptimistic, _
Options:=adCmdTable
'Load all records from Excel to Access.
For I = 2 To Rw
rst.AddNew
For j = 1 To 114
rst(Cells(1, j).Value) = Cells(I, j).Value
Next j
rst.Update
Next I
' Close the connection
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
ErrorHandling:
Select Case Err.Number
Case 3265
Resume Next
Case Else
MsgBox "Fehler " & Err.Number & vbCrLf & Err.Description
Resume Next
End Select
End Sub

Anzeige
AW: Export Excell Tabelle per VBA
02.08.2017 12:42:20
Luschi
Hallo Henry,
ich glaube kaum, daß Du weißt, was Du da überhaupt tust:
- rst ist das Recordset, was per ADO an Excel geliefert wird.
- was soll da 'rst.AddNew'?
- willst Du das gelieferte Recordset manimulieren, indem Du einen neuen Datensatz anhängst?
Mein Ratschlag: stelle eine Access-DB bereit und ich zeige Dir, wie es richtig geht.
Das stochern im Nebel mit sinnlosen 'On Error GoTo ErrorHandling' wird nie ein korrektes Ergebnis liefern!
Gruß von Luschi
aus klein-Paris
AW: Export Excell Tabelle per VBA
02.08.2017 10:46:05
Luschi
Hallo Henry,
M$ hat mit Einführung von Office 2007 den Provider gewechselt:
'bis Office 2003
.Provider = "Microsoft.Jet.OLEDB.4.0"
ab Office 2007
.Provider = "Microsoft.ACE.OLEDB.12.0"
siehe dazu auch:
https://support.microsoft.com/de-de/help/283874/how-to-find-a-record-using-ado-and-jet-ole-db-provider
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Export Excell Tabelle per VBA
02.08.2017 10:53:38
Henry
Moin Luschi, vielen Dank.
Ist geändert.
Jetzt geht er bis zur Zeile "DBS.Open "Zahlen", ADOC, adOpenKeyset, adLockOptimistic"
Danach sprint er in den error handler und gibt folgendes aus:
Unzulässige SQL-Anweisung; Delete; Insert; Select; Procedure oder Update erwartet...
Warum SQL ? Entschuldige aber ich kann zwar die ranges etc anpassen aber das geht weit über mein
Können hinaus.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige