Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1196to1200
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

Exceldaten nach Accsess

Exceldaten nach Accsess
adi
Hallo Excel und Access Freunde,
es bestehen zwei identische Dateien, ein Excel und eine Access Datei.
In der jetzigen Version sind zehn Spalten belegt und alles funktioniert
sehr gut. Die Daten werden von den unten stehenden Code von Excel nach Access übertragen.
Ich möchte nun die Dateien um zehn Spalten erweitern, so dass ich dann zwanzig Spalten habe.
Eine Zeit lang versuche ich das Problem zu lösen, aber es geht nicht, dazu fehlen mir die Kenntnisse.
Der Fehler tritt schon auf, wenn ich nur eine Spalte dazu nehme. Unten im Code habe ich
ein Beispiel markiert wo der kompilierungs Fehler auftritt.
Hoffentlich habe ich das Problem verständlich beschrieben.
Würde mich sehr über eine Antwort freuen.
Im übrigen habe ich vor einigen Tagen schon einmal hier angefragt und danach beide Dateien
hoch geladen, aber leider keine verwertbare Rückmeldung bekommen.
Option Explicit
Sub CreateNewAccessDB(Optional Access2003 As Boolean = True)
Dim adoxCatalog As New ADOX.Catalog
Dim adoxTable As New ADOX.Table
Dim xCol As New ADOX.Column
Dim adoRecordset As ADODB.Recordset
Dim adoConnection As ADODB.Connection, txt As String
Dim cmd As ADODB.Command
Dim strFile1 As String, strFile2 As String, strTable As String
Dim adoxProvider As String, lngRow As Long, lngCol As Long, lngRowMax As Long
Dim objSource           As Worksheet
Const adOpenKeyset      As Long = 1
Const adLockOptimistic  As Long = 3
strFile1 = "Adressen_Export.mdb"
strFile2 = ThisWorkbook.Path & "\" & strFile1
'Tabellenname in Access Datenbank
strTable = "KGV"
'Quelldaten
Set objSource = ThisWorkbook.Worksheets("KGV")
If ""  Dir(strFile2, vbNormal) Then
Kill strFile2
End If
Set adoxCatalog = New ADOX.Catalog
'ADO-Objekte erzeugen
Set adoConnection = New ADODB.Connection
Set adoRecordset = New ADODB.Recordset
If Access2003 Then
' Access 2003 Datenbank erzeugen (.mdb)
adoxProvider = "Microsoft.Jet.OLEDB.4.0"
lngRowMax = 65536
'   Else
'Access 2007 Datenbank erzeugen (.accdb)
'      adoxProvider = "Microsoft.ACE.OLEDB.12.0"
'      lngRowMax = 1000000
End If
adoConnection.Provider = adoxProvider
adoxProvider = "Provider=" & adoxProvider
'Dateiort und Name der Zieldatei festlegen
adoxCatalog.Create adoxProvider & ";Data Source=" & strFile2
adoxCatalog.ActiveConnection = adoxProvider & ";Data Source=" & strFile2
Set adoxTable = New ADOX.Table
With adoxTable
.Name = strTable
.ParentCatalog = adoxCatalog
'Felder anlegen
Set xCol = New ADOX.Column
With xCol
.Name = "Garten_Nr"
.Type = adVarWChar
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "Anrede"
.Type = adVarWChar
.DefinedSize = 30
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "Vorname"
.Type = adVarWChar
.DefinedSize = 30
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "Nachname"
.Type = adVarWChar
.DefinedSize = 30
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "Strasse"
.Type = adVarWChar
.DefinedSize = 30
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "Ort"
.Type = adVarWChar
.DefinedSize = 30
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "Telefon"
.Type = adVarWChar
.DefinedSize = 30
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "Geboren"
.Type = adDate
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "Eintritt"
.Type = adDate
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
Set xCol = New ADOX.Column
With xCol
.Name = "KWh"
.Type = adVarWChar
.DefinedSize = 30
End With
.Columns.Append xCol
With xCol
.Properties("Nullable").Value = True
.Properties("Jet OLEDB:Allow Zero Length") = True
End With
End With
' z.B. Wenn ich diesen Code eingebe, kommt sofort Kompilierung Fehler,
'       Bei Columns.Append xCol
'    Set xCol = New ADOX.Column
'       With xCol
'         .Name = "KWh_Verbrauch"
'        .Type = adVarWChar
'         .DefinedSize = 30
'      End With
'     .Columns.Append xCol
'      With xCol
'        .Properties("Nullable").Value = True
'        .Properties("Jet OLEDB:Allow Zero Length") = True
'      End With
'    End With
adoxCatalog.Tables.Append adoxTable
Set adoxCatalog = Nothing
Set adoxTable = Nothing
Set adoxCatalog = Nothing
' Verbindung zur Datenbank herstellen
adoConnection.Open "Data Source=" & strFile2, UserId:="", Password:=""
' Datenbank auslesen
adoRecordset.Open "SELECT * FROM [" & strTable & "]", _
adoConnection, adOpenKeyset, adLockOptimistic
' Mit Daten aus Blatt Quelldaten füllen
With adoRecordset
For lngRow = 2 To objSource.Cells(lngRowMax, 1).End(xlUp).Row
.AddNew ' Neuer Datensatz
For lngCol = 1 To 10
.Fields(lngCol - 1) = objSource.Cells(lngRow, lngCol)
Next
.Update ' Datenbank aktualisieren
Next
End With
' Schließen
adoRecordset.Close
Set adoRecordset = Nothing
adoConnection.Close
Set adoConnection = Nothing
MsgBox "Datenbankdatei:" & vbCrLf & strFile1 & vbCrLf & _
"erfolgreich angelegt"
Exit Sub
ErrorHandler:
MsgBox "Fehlermeldung Original:" & vbCrLf & Err.Description _
& vbCrLf & vbCrLf & _
"Eventuell Fehler beim Anlegen der Datei" & vbCrLf & _
strFile1 & vbCrLf & _
"Laufwerk möglicherweise Schreibgeschützt (CD)"
On Error Resume Next
Set adoxTable = Nothing
Set adoxCatalog = Nothing
adoRecordset.Close
Set adoRecordset = Nothing
adoConnection.Close
Set adoConnection = Nothing
End Sub
Gruß
adi

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Exceldaten nach Accsess
21.01.2011 08:44:38
Case
Hallo,
Du kannst nicht einfach den letzten Block nehmen und eins nach unten kopieren, denn dann hast Du ein "End With" zuviel. :-)
Durch den Punkt vor ".Columns.Append xCol" hast Du dann einen nicht ausreichend definierten Verweis.
Lösche also einen Block über dem im Moment fehlerhaften das untere "End With" raus - dann klappt das.
Servus
Case
AW: Exceldaten nach Accsess
21.01.2011 08:50:23
Kawensmann
Hallo,
das zweite "End with" über dem Block mit dem Fehler bezieht sich auf "With adoxTable", darf also nicht in jeden neuen "Set xCol" -Block mitkopiert werden sondern gehört nur ans Ende.
Gruß
Kawensmann
Anzeige
AW: Exceldaten nach Accsess
21.01.2011 08:54:46
Kawensmann
Da war ich wohl etwas langsam ... :)
Ich formatiere meinen Code übrigens mit "Smart indenter", da fallen solche Dinge durch das automatische Einrücken von Schleifen und With-Blöcken schneller auf...
http://www.oaltd.co.uk/Indenter/Default.htm
AW: Exceldaten nach Accsess
21.01.2011 14:27:37
adi
Hallo Kawensmann,
das zweite "End with" war der Fehler,
es hätte nicht dort stehen dürfen.
Danke für den Tip. Jetzt läuft alles prima.
Gruß
adi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige