使用Excel VBA使用ADO将数据追加到Access表

使用Excel VBA使用ADO将数据追加到Access表,excel,vba,ms-access,Excel,Vba,Ms Access,我正在尝试使用Excel VBA将Excel数据附加到Access表中 我在Excel(活动工作表)的工作表中有数据。我想将A4-BL4行的内容附加到Access中名为Table1的表中 我正试图用ADO和一个记录集来实现这一点 我的代码给了我一个错误 参数类型错误、超出可接受范围或相互冲突 在线: rs.Open qry, cn, adOpenKeyset 我不熟悉使用Access 这一点至关重要,不能从Excel而不是Access触发 子导出() Application.ScreenUp

我正在尝试使用Excel VBA将Excel数据附加到Access表中

我在Excel(活动工作表)的工作表中有数据。我想将A4-BL4行的内容附加到Access中名为Table1的表中

我正试图用ADO和一个记录集来实现这一点

我的代码给了我一个错误

参数类型错误、超出可接受范围或相互冲突

在线:

 rs.Open qry, cn, adOpenKeyset
我不熟悉使用Access

这一点至关重要,不能从Excel而不是Access触发

子导出()
Application.ScreenUpdating=False
Dim cn作为ADODB.Connection
将rs设置为新ADODB.Recordset
Set cn=New ADODB.Connection
strcon=“Provider=Microsoft.ACE.OLEDB.12.0;”_
“数据源=C:\Users\yilmadu001\Desktop\Database.accdb;”
中国公开赛(strcon)
qry=“从表1中选择*”
rs.开放式qry、cn、adOpenKeyset
艾德纽卢比
rs.字段(“日期”)=范围(“A4”)值
rs.字段(“订单号”)=范围(“B4”).值
rs.字段(“产品代码”)=范围(“C4”).值
rs.字段(“E-Number”)=范围(“D4”)值
rs.字段(“大小”)=范围(“E4”)值
rs.字段(“类型”)=范围(“F4”).值
rs.字段(“类型2”)=范围(“G4”).值
rs字段(“电压”)=范围(“H4”)值
rs.字段(“复合”)=范围(“I4”)值
rs.字段(“编号”)=范围(“J4”)值
rs.字段(“标签号”)=范围(“K4”).值
rs.字段(“数量”)=范围(“L4”)值
rs.字段(“零”)=范围(“M4”)值
rs.字段(“净”)=范围(“N4”)值
rs.字段(“实际净”)=范围(“O4”)值
rs.字段(“最小值”)=范围(“P4”)值
rs.字段(“实际最小值”)=范围(“Q4”)值
rs.Fields(“max1”)=范围(“R4”)值
rs.字段(“max2”)=范围(“S4”)值
rs.字段(“顶部”)=范围(“T4”)值
rs.字段(“2”)=范围(“U4”)值
rs.字段(“侧”)=范围(“V4”)值
rs.字段(“5”)=范围(“W4”)值
rs.字段(“底部”)=范围(“X4”).值
rs.字段(“8”)=范围(“Y4”)值
rs.Fields(“side2”)=范围(“Z4”)值
rs.字段(“10”)=范围(“AA4”)值
rs.字段(“set1”)=范围(“AB4”).值
rs.字段(“set2”)=范围(“AC4”).值
rs.字段(“set3”)=范围(“AD4”).值
rs.Fields(“Usage1”)=范围(“AE4”).值
rs.Fields(“Usage2”)=范围(“AF4”).值
rs.字段(“主(%)”)=范围(“AG4”).值
rs.字段(“A(%)”)=范围(“AH4”).值
rs.字段(“比率(%)”)=范围(“AI4”).值
rs.字段(“set3”)=范围(“AJ4”).值
rs.Fields(“set4”)=范围(“AK4”).值
rs.字段(“核心”)=范围(“AL4”).值
rs.字段(“Tip1”)=范围(“AM4”)值
rs.字段(“Tip2”)=范围(“AN4”)值
rs.字段(“Tip3”)=范围(“AO4”)值
rs.字段(“set5”)=范围(“AP4”).值
rs.字段(“速度”)=范围(“AQ4”).值
rs.字段(“速度2”)=范围(“AR4”).值
rs.字段(“速度3”)=范围(“AS4”).值
rs.字段(“速度4”)=范围(“AT4”).值
rs.字段(“速度5”)=范围(“AU4”).值
rs.字段(“速度6”)=范围(“AV4”).值
rs.字段(“速度7”)=范围(“AW4”).值
rs.字段(“设置”)=范围(“AX4”).值
rs.字段(“选定”)=范围(“AY4”).值
rs.字段(“S/U1”)=范围(“AZ4”)值
rs.字段(“S/U2”)=范围(“BA4”).值
rs.字段(“S/U3”)=范围(“BB4”).值
rs.字段(“开/关”)=范围(“BC4”).值
rs.字段(“是/否”)=范围(“BD4”).值
rs.字段(“注释”)=范围(“BE4”).值
rs.Fields(“Size1”)=范围(“BF4”).值
rs.Fields(“Size2”)=范围(“BG4”).值
rs.字段(“尺寸3”)=范围(“BH4”).值
rs.字段(“Temp1”)=范围(“BI4”).值
rs.Fields(“Temp2”)=范围(“BJ4”)值
rs.字段(“Temp3”)=范围(“BK4”).值
rs.Fields(“Temp4”)=范围(“BL4”)值
rs.更新
rs.Close
db.关闭
Application.ScreenUpdating=True
端接头

您需要指定可更新的记录集:

rs.Open qry, cn, adOpenKeyset, adLockOptimistic
由于查询只是获取所有记录,因此可以使用
adCmdTable
选项,但只需传递表名:

rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic, adCmdTable

@HansUp现在我在“rs.AddNew”行上得到一个新错误,它说当前记录集不支持更新。这可能是提供程序或所选锁定类型的限制。@HansUp所有这些都不起作用。不幸的是,仍然错误“当前记录集不支持更新。这可能是提供程序或所选锁定类型的限制”
rs.Open“Table1”、cn、adOpenKeyset、adLock悲观的
@HansUp似乎已经修复了它,但是现在它给了我一个错误“无效的SQL语句,应该在同一行上出现”Delete“,”Insert“,”Procedure“,”Select“,”Update“,我想我缺少了另一个参数,请看Ibo的答案。对不起,我没有使用ADO;使用rs行中的DAO.Synthax error FROM子句更容易。打开qry、cn、adpenkeyset、adlockoptimize、adCmdTabletry而不使用adcmdtable ACCESS数据库中是否有表1?尝试关闭所有内容,因为如果您处于设计模式等,您的连接/查询将失败。如果您使用
adCmdTable
,则只需传递表名,而不需要传递SQL查询,这就是导致此错误的原因。也要对范围使用显式引用,例如使用
rs(“field1”)。value=WS.range(“A1”)
其中
WS
是工作表对象(
set WS=thiswoolk.Worksheets(“Sheet1”)