Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
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
Daten aus Excel in Accesstabelle schreiben
Tim
Hallo zusammen,
ich habe diverse Daten in Excel vorliegen, die ich in form einer *.mdb Tabelle weiterleiten muss. Da sich der Datensatz regelmäßig ändern kann, würde ich gerne dafür ein Makro haben. Ich bin soweit, die *.mdb erstellen zu können und es wird mir darin eine Tabelle mit dem namen Kontakte angelegt. Er will mir die Daten einfach nicht in die Datenbank schreiben. Egal wie ich es versuche, die Datenbank bleibt immer leer. Folgenden Code habe ich :
Verweis auf Microsoft DAO 3.6 Object Library ist gesetzt.
Private Sub CommandButton3_Click()
Dim Datenbank As Database
Dim Datensatz As Recordset
Dim Tabelle As TableDef
Dim Feld1 As Field
Dim Feld2 As Field
Dim Feld3 As Field
Dim x As Integer
Dim y As Integer
Dim Dateiname As String
Const Tabellenname = "Kontakte"
'Erzeugen der Datenbank und Tabelle
Dateiname = InputBox("Bitte Namen eingeben")
Dateiname = ThisWorkbook.Path & "\Kontaktelisten\" & Dateiname & ".mdb"
On Error Resume Next
'Prüfen, ob Datenbank bereits vorhanden
If Dir(Dateiname) = "" Then
Set Datenbank = CreateDatabase(Dateiname, dbLangGeneral, dbEncrypt)     'Datenbank  _
erzeugen
End If
Set Datenbank = OpenDatabase(Dateiname)                                 'Tabelle erzeugen
Set Tabelle = Datenbank.CreateTableDef(Tabellenname)
'Felder erzeugen Die Namen der Felder werden aus den entsprechenden Zellen geholt
With Tabelle
Set Feld1 = .CreateField(Range("A1"), dbText, 200)
Set Feld2 = .CreateField(Range("B1"), dbText, 200)
Set Feld3 = .CreateField(Range("C1"), dbText, 200)
.Fields.Append Feld1
.Fields.Append Feld2
.Fields.Append Feld3
End With
'Tabelle hinzufügen
Datenbank.TableDefs.Append Tabelle
Set Datensatz = Datenbank.OpenRecordset(Tabellenname)
With Datensatz
For x = 2 To 5          'Zeile 2 bis 5
.AddNew
For y = 1 To 5      'Spalte 1 bis 5
.Fields(tabelle11.Cells(1, y)).Value = Tabelle11.Cells(x, y).Text
Next y
'Datensatz updaten
.Update
.Bookmark = .LastModified
Next x
End With
'Datenbank schließen
Datenbank.Close
End Sub
Wenn mir jemand helfen könnte, wäre echt toll.
Gruß
Tim

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Daten aus Excel in Accesstabelle schreiben
17.07.2011 12:29:51
Anton
Hallo Tim,
probier's hiermit:
Code:

Private Sub CommandButton3_Click()  
  Dim Datenbank As Database  
  Dim Datensatz As Recordset  
  Dim Tabelle As TableDef  
  Dim Feld1 As Field  
  Dim Feld2 As Field  
  Dim Feld3 As Field  
  Dim x As Integer    
  Dim y As Integer    
  Dim Dateiname As String  
  Const Tabellenname = "Kontakte"
 'Erzeugen der Datenbank und Tabelle
 'Dateiname = InputBox("Bitte Namen eingeben")
  Dateiname = "E:\Temp\Test\test.mdb"
 'Prüfen, ob Datenbank bereits vorhanden
  If Dir(Dateiname) = "" Then  
    Set Datenbank = CreateDatabase(Dateiname, dbLangGeneral, dbEncrypt)    'Datenbank erzeugen
  End If  
  Set Datenbank = OpenDatabase(Dateiname)  
 'Prüfen, ob Tabelle bereits vorhanden
  Set kontakte = Datenbank.TableDefs(Tabellenname)
  If kontakte Is Nothing Then    
   'Tabelle erzeugen
    Set Tabelle = Datenbank.CreateTableDef(Tabellenname)
   'Felder erzeugen Die Namen der Felder werden aus den entsprechenden Zellen geholt
    With Tabelle
      Set Feld1 = .CreateField(Range("A1"), dbText, 200)  
      Set Feld2 = .CreateField(Range("B1"), dbText, 200)  
      Set Feld3 = .CreateField(Range("C1"), dbText, 200)  
      .Fields.Append Feld1
      .Fields.Append Feld2
      .Fields.Append Feld3
    End With  
   'Tabelle hinzufügen
    Datenbank.TableDefs.Append Tabelle
  End If  
  Set Datensatz = Datenbank.OpenRecordset(Tabellenname)  
  With Datensatz
    For x = 2 To 5          'Zeile 2 bis 5
      .AddNew
     'hier ist der Fehler: Tabelle "Kontakte" hat nur drei Felder,
     'du versuchst aber 5 Felder zu befühlen
     'For y = 1 To 5      'Spalte 1 bis 5
      For y = 1 To 3        'Spalte 1 bis 3
        .Fields(Tabelle1.Cells(1, y)).Value = Tabelle1.Cells(x, y).Text
      Next y
     'Datensatz updaten
      .Update
      .Bookmark = .LastModified
    Next x
  End With  
 'Datenbank schließen
  Datenbank.Close
End Sub  


mfg Anton
Anzeige
wie erlaube ich leere Zelleneinträge
17.07.2011 13:21:15
Tim
@ Anton, den Fehler hatte ich noch selber bemerkt, hat aber keine Lösung gebracht. Danke
Ich hab ein wenig rumprobiert und bin dahingehend weitergekommen, das der Fehler wohl darin liegt, dass in der erstellten Accessdatenbank keine Leeren Zelleneinträge in den erzeugten Spalten erlaubt sind.
Folgender Code funktioniert jetzt:
Sub InAccessSchreiben(ende As Integer)
Dim Datenbank As Database
Dim Datensatz As Recordset
Dim Tabelle As TableDef
Dim Feld2 As Field
Dim Feld3 As Field
Dim Feld4 As Field
Dim Feld5 As Field
Dim Feld6 As Field
Dim Feld7 As Field
Dim Feld8 As Field
Dim Feld9 As Field
Dim Feld10 As Field
Dim Feld11 As Field
Dim Feld12 As Field
Dim Feld13 As Field
Dim Feld14 As Field
Dim Feld15 As Field
Dim Feld16 As Field
Dim Feld17 As Field
Dim x As Integer
Dim y As Integer
Dim Dateiname As String
Const Tabellenname = "Kontakte"
'Erzeugen der Datenbank und Tabelle
Dateiname = InputBox("Bitte Listennamen eingeben")
Dateiname = ThisWorkbook.Path & "\Kontaktelisten\" & Dateiname & ".mdb"
If Dir(Dateiname) = "" Then                                                 'Prüfen, ob  _
Datenbank bereits vorhanden
Set Datenbank = CreateDatabase(Dateiname, dbLangGeneral, dbEncrypt)     'Datenbank  _
erzeugen
End If
Set Datenbank = OpenDatabase(Dateiname)                                 'Tabelle erzeugen
Set Tabelle = Datenbank.CreateTableDef(Tabellenname)
'Felder erzeugen Die Namen der Felder werden aus den entsprechenden Zellen geholt
With Tabelle
Set Feld2 = .CreateField(Range("A1"), dbText, 200)
Set Feld3 = .CreateField(Range("B1"), dbText, 200)
Set Feld4 = .CreateField(Range("C1"), dbText, 200)
Set Feld5 = .CreateField(Range("D1"), dbText, 200)
Set Feld6 = .CreateField(Range("E1"), dbText, 200)
Set Feld7 = .CreateField(Range("F1"), dbText, 200)
Set Feld8 = .CreateField(Range("G1"), dbText, 200)
Set Feld9 = .CreateField(Range("H1"), dbText, 200)
Set Feld10 = .CreateField(Range("I1"), dbText, 200)
Set Feld11 = .CreateField(Range("J1"), dbText, 200)
Set Feld12 = .CreateField(Range("K1"), dbText, 200)
Set Feld13 = .CreateField(Range("L1"), dbText, 200)
Set Feld14 = .CreateField(Range("M1"), dbText, 200)
Set Feld15 = .CreateField(Range("N1"), dbText, 200)
Set Feld16 = .CreateField(Range("O1"), dbText, 200)
Set Feld17 = .CreateField(Range("P1"), dbText, 200)
.Fields.Append Feld2
.Fields.Append Feld3
.Fields.Append Feld4
.Fields.Append Feld5
.Fields.Append Feld6
.Fields.Append Feld7
.Fields.Append Feld8
.Fields.Append Feld9
.Fields.Append Feld10
.Fields.Append Feld11
.Fields.Append Feld12
.Fields.Append Feld13
.Fields.Append Feld14
.Fields.Append Feld15
.Fields.Append Feld16
.Fields.Append Feld17
End With
'Tabelle hinzufügen
Datenbank.TableDefs.Append Tabelle
Datenbank.Close
ZweiterVersuch Dateiname, ende
End Sub

Sub ZweiterVersuch(Dateiname As String, ende As Integer)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim x As Integer
Dim y As Integer
' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=" & Dateiname & ";"
' open a recordset
Set rs = New ADODB.Recordset
rs.Open "Kontakte", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
For x = 2 To ende - 1
' repeat until first empty cell in column A
With rs
.AddNew ' create a new record
' add values to each field in the record
For y = 1 To 16
' Prüfen on Zelle Eintrag besitzt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If Tabelle11.Cells(x, y).Text  "" Then
.Fields(Tabelle11.Cells(1, y).Text) = Tabelle11.Cells(x, y).Text
Else
.Fields(Tabelle11.Cells(1, y).Text) = " "
End If
If Err.Number  0 Then MsgBox Err.Description
Next y
.Update ' stores the new record
End With
Next x
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
Ich trage also wenn ich eine Leere Zelle hab ein Leerzeichen ein. DAs ist zwar eine Lösung, aber ich würde eigentlich lieber die Eigenschaft der Access-Spalten dahingehen ändern, dass Sie leere Einträge zulassen...
Jemand eine Ahnung ob und wie das geht ?
Danke und Gruß
Tim
Anzeige
wie erlaube ich leere Zelleneinträge
17.07.2011 13:47:50
Anton
Hallo Tim,
schau dir in OH von DAO die AllowZeroLength-Eigenschaft an.
mfg Anton
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige