我要做的是,在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
答案 0 :(得分:11)
答案 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"
这应该在填充数据运行的下一部分之前清除表格。