如何使用VBA清除Access中的表?

时间:2009-04-18 03:15:21

标签: excel vba ms-access excel-vba access-vba

我要做的是,在Excel中,使用VBA将数据推送到现有的Access表。我已经能够做到这一点,但我有一个小打嗝。在我推送数据进行访问之前,我想清除Access表上的当前数据,因此当Excel中的新数据进入时,它是Access表中的唯一数据。我真的不知道如何为Access编写代码,因为该类已经在VBA for Excel上。我尝试了几种不同的方法,每次都不起作用。例如,似乎应该工作的代码是

DoCmd.RunSQL "DELETE tblName.* FROM CoversheetTableFourthAttempt

但是我告诉我定义一个对象时出错。

如果你能帮我解决这个问题,我会真的很喜欢它

我已将我的代码放在下面以供参考。

Sub AccessFourthMonth()

Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
    ' connect to the Access database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source=C:\Users\Kent\Documents\MBA\Winter 2009 Semester\MBA 614\Final Project\shilded\testdatabase.mdb"


' open a recordset
Set rs = New ADODB.Recordset

rs.Open "CoversheetTableFourthAttempt", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
r = 2 ' the start row in the worksheet

Do While Len(Range("A" & r).Formula) > 0
' repeat until first empty cell in column A
    With rs

        .AddNew ' create a new record
        ' add values to each field in the record
        .Fields("Project") = Range("A" & r).Value
        .Fields("Description") = Range("B" & r).Value
        .Fields("Amount") = Range("C" & r).Value
        .Fields("Date") = Range("D" & r).Value
        .Update ' stores the new record
    End With
    r = r + 1 ' next row
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub

4 个答案:

答案 0 :(得分:11)

尝试

DoCmd.RunSQL "DELETE * FROM TableName"

这篇文章可能很有用:Executing SQL Statements in VBA Code

答案 1 :(得分:2)

从Excel中尝试以下操作:

dim cn as adodb.connection
dim cmd as adodb.command
set cn = new adodb.connection
cn.open "put your connection string here"
set cmd = new adodb.command
cmd.commandtype = adcmdtext
cmd.commandtext = "Delete * from myTable"
cmd.activeconnection = cn.connectionstring
cmd.execute

答案 2 :(得分:2)

您的DoCmd方法存在两个问题。您使用引号来启动字符串,但不包括结束引号。但即使正确引用,您的DoCmd也无效,因为Excel不知道 CoversheetTableFourthAttempt 是Access数据库中表的名称。

您展示了可以成功创建与Access数据库的ADO连接。所以我的建议是使用连接对象的Execute方法来执行SQL语句:

cn.Execute "DELETE FROM CoversheetTableFourthAttempt;"

最后,访问Problem names and reserved words in Access以了解 Date Description 的原因, Project 不是Access字段名称的绝佳选择。

答案 3 :(得分:2)

DoCmd是Access应用程序的内部功能,Excel应用程序无法识别。 解决问题的简单方法是从Excel本身触发删除查询。

在cn.Open“Provider .. line

之后添加此部分
cn.Execute "DELETE * FROM CoversheetTableFourthAttempt"  

这应该在填充数据运行的下一部分之前清除表格。