2017-06-07 5 views
0

Ich möchte eine Schaltfläche in der Excel-Tabelle haben und die Daten in die Access-Tabelle kopiert haben. Der Bereich ist ein automatisch ausgefülltes Feld von einem anderen Blatt in derselben Arbeitsmappe.Excel-Bereich exportieren, um auf Tabelle VBA zuzugreifen

Ich habe versucht, einige Codes, um dies geschehen zu lassen, aber ich erhalte entweder einen Fehler 1004: applikations- oder objektdefinierter Fehler oder kein Fehler, aber Daten werden nicht in Access DB kopiert.

Mein Code wird unten kopiert.

Sub Export_Data() 

    Dim cnn As ADODB.Connection 
    Dim rst As ADODB.Recordset 
    Dim dbPath 
    Dim x As Long, i As Long 

    dbPath = "H:\RFD\RequestForData.accdb" 

    Set cnn = New ADODB.Connection 

    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath 

    Set rst = New ADODB.Recordset 'assign memory to the recordset 

    rst.Open Source:="tblRequests", ActiveConnection:=cnn, _ 
      CursorType:=adOpenDynamic, LockType:=adLockOptimistic, _ 
      Options:=adCmdTable 

    rst.AddNew 
    For i = 1 To 13 
     rst(Cells(1, i).Value) = Cells(x, i).Value 
    Next i 
    rst.Update 

    rst.Close 
    cnn.Close 

    Set rst = Nothing 
    Set cnn = Nothing 

    MsgBox " The data has been successfully sent to the access database" 

    Set rst = Nothing 
    Set cnn = Nothing 

End Sub 
+0

Können Sie die Daten von Access statt Excel importieren? Wenn ja 'DoCmd.TransferSpreadsheet' könnte tun, was Sie wollen, ich denke – FlorianGD

+0

was ist x? Es ist nirgendwo initialisiert. – RADO

+0

Ja, x wird nicht initialisiert oder inkrementiert. Sie möchten 13 Felder und nur 1 Datensatz füllen? – June7

Antwort

0

an Ihrem Unterprogramm Blick sehe ich zwei Dinge, die es nicht zur Arbeit machen:

  • rst (Cells (1, i) .Value) = Cells (x, i) .Value < - Wo wird 'x' initialisiert?

  • Es gibt nur eine Schleife, die sich über die Felder bewegt, aber ich denke, es sollte eine andere Schleife für die Zeilen im Excel sein.

Mit diesen beiden Änderungen, die Schleife, wenn die Datensätze sind so etwas geworden retten könnte:

For x = 1 TO lastRow ' Last row has to be calculated somehow 
     rst.AddNew 
     For i = 1 To 13 
      rst(Cells(1, i).Value) = Cells(x, i).Value 
     Next i 
     rst.Update 
    Next x 

Hoffe, es hilft.

+0

Hallo, danke für deine Antwort. Ich habe deinen Code ausprobiert. Ich konnte ein Meldungsfeld mit der Meldung "Die Daten wurden erfolgreich an die Zugriffsdatenbank gesendet" haben, aber wenn ich zurück zur Datenbank gehe, ist kein Datensatz vorhanden. Da der Datensatz in der Excel-Tabelle bei Zeile 7 beginnt, habe ich auch x = 7 gesetzt. @USeptim –

+0

Hallo Joanne. Ich habe ein ähnliches Beispiel (mit nur drei Feldern) reproduziert und es hat funktioniert. Die Zeilen werden der Access-Datenbank hinzugefügt. Ich würde einige Kontrolltests machen, z. B. einen Zähler hinzufügen, der aufzeichnet, wie viele Zeilen Ihre Routine verarbeitet hat, und ein Meldungsfeld hinzufügen, das diese Zahl anzeigt oder prüfen, ob das Primärschlüsselfeld belegt ist ... Ich würde diese Art von Dingen testen ... –

Verwandte Themen