Excel 在access中复制表时出现错误424

Excel 在access中复制表时出现错误424,excel,vba,Excel,Vba,我对SQL简直是个新手。我试图从ExcelVBA中编写一些代码,以访问Access DB文件,删除一个表,并根据其中一列的值将Access中另一个表中的数据复制到第一个表中 到目前为止,我只是尝试将一个表复制到另一个表,我得到了424:objectrequired。我错过了什么 Sub Update() Dim cnnAccess As ADODB.Connection Dim rstAccess As ADODB.Recordset Set cnnAccess = New ADODB.Co

我对SQL简直是个新手。我试图从ExcelVBA中编写一些代码,以访问Access DB文件,删除一个表,并根据其中一列的值将Access中另一个表中的数据复制到第一个表中

到目前为止,我只是尝试将一个表复制到另一个表,我得到了424:objectrequired。我错过了什么

Sub Update()

Dim cnnAccess As ADODB.Connection
Dim rstAccess As ADODB.Recordset

Set cnnAccess = New ADODB.Connection
Set rstAccess = New ADODB.Recordset
cnnAccess.ConnectionString = "Driver={Microsoft Access Driver (*.mdb,*.accdb)};Dbq= (path to file)\(nameofDB).accdb;Uid=ID;Pwd=PASSWORD;"
cnnAccess.Open

cnn.Execute "Drop Table tbl_daily"  <-- Error hits on this line
cnn.Execute "SELECT * From tbl_TMD where date = 42856 INTO tbl_daily FROM 
tbl_TMD"

End Sub
子更新()
作为ADODB.连接的Dim cnnAccess
Dim rstAccess作为ADODB.Recordset
设置cnnAccess=newadodb.Connection
Set rstAccess=New ADODB.Recordset
cnnAccess.ConnectionString=“Driver={Microsoft Access驱动程序(*.mdb,*.accdb)};Dbq=(文件路径)\(nameofDB.accdb;Uid=ID;Pwd=PASSWORD;”
cnnAccess.打开

执行“Drop Table tbl_daily”试试下面的两个脚本。另外,请记住设置对Microsoft DAO x.xx对象库的引用

Sub DAOCopyFromRecordSet(DBFullName As String, TableName As String, _
    FieldName As String, TargetRange As Range)
' Example: DAOCopyFromRecordSet "C:\FolderName\DataBaseName.mdb", _
    "TableName", "FieldName", Range("C1")
Dim db As Database, rs As Recordset
Dim intColIndex As Integer
    Set TargetRange = TargetRange.Cells(1, 1)
    Set db = OpenDatabase(DBFullName)
    Set rs = db.OpenRecordset(TableName, dbOpenTable) ' all records
    'Set rs = db.OpenRecordset("SELECT * FROM " & TableName & _
        " WHERE " & FieldName & _
        " = 'MyCriteria'", dbReadOnly) ' filter records
    ' write field names
    For intColIndex = 0 To rs.Fields.Count - 1
        TargetRange.Offset(0, intColIndex).Value = rs.Fields(intColIndex).Name
    Next
    ' write recordset
    TargetRange.Offset(1, 0).CopyFromRecordset rs
    Set rs = Nothing
    db.Close
    Set db = Nothing
End Sub
如果希望对数据导入进行更多控制,可以自定义以下宏:

Sub DAOFromAccessToExcel(DBFullName As String, TableName As String, _
    FieldName As String, TargetRange As Range)
' Example: DAOFromAccessToExcel "C:\FolderName\DataBaseName.mdb", _
    "TableName", "FieldName", Range("B1")
Dim db As Database, rs As Recordset
Dim lngRowIndex As Long
    Set TargetRange = TargetRange.Cells(1, 1)
    Set db = OpenDatabase(DBFullName)
    Set rs = db.OpenRecordset(TableName, dbOpenTable) ' all records
    'Set rs = DB.OpenRecordset("SELECT * FROM " & _
        TableName & " WHERE " & FieldName & _
        " = 'MyCriteria'", dbReadOnly) ' filter records
    lngRowIndex = 0
    With rs
        If Not .BOF Then .MoveFirst
        While Not .EOF
            TargetRange.Offset(lngRowIndex, 0).Formula = .Fields(FieldName)
            .MoveNext
            lngRowIndex = lngRowIndex + 1
        Wend
    End With
    Set rs = Nothing
    db.Close
    Set db = Nothing
End Sub

你从来没有设置过cnn,我想你是想让那一行读出来,
cnnacess.Execute
。我建议在所有模块的顶部使用
选项Explicit
。在下一条语句中也会遇到同样的问题。如果删除表,则无法将其插入(表/对象已删除)。你确定错误不在下一行吗?你需要去哪里?(或者可能有不止一个错误)。我同意我没有看到cnn对象集。