Excel不将数据传输到Access数据库

时间:2015-05-13 14:30:19

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

我在Access 2010中有一个存储项目信息的表。主要栏目 - 为此目的 - 是.slick-prev, .slick-next { background: none repeat scroll 0 0 transparent; border: medium none; color: transparent; cursor: pointer; display: block; font-size: 0px; height: 40px; line-height: 0; margin-top: -10px; outline: medium none; padding: 0; position: absolute; top: 50%; width: 20px; } LocationIDPriority1(其具有正确的名称,但用于概括......)

我还有一个Excel 2010电子表格,可以将此信息导出到Access中。它的作用是遍历Excel和Access中的Priority2列,并为所有匹配的字段着色。然后,它会检查LocationIDPriority1列以查看是否已填充任何行,并将未填充的行着色。这部分工作正常。

它应该做什么 next 是将从Excel着色的两个Priority2列中的值复制到Access表中。这种情况没有发生,我不确定为什么。

整个代码相当长,所以这里只是关于传递值的部分。我可以添加任何其他可能有用的代码。

Priority

我不是VBA程序员,所以任何建议都会很棒。

1 个答案:

答案 0 :(得分:3)

我的猜测是,当您尝试添加一个 LocationID 值的新行时,您的代码会触发主键违规,该值与另一行的 LocationID 值相匹配。这是添加新行的地方:

.AddNew
.Fields("LocationID") = Range("B" & r).Value

因为你在程序的早期就有这个...

On Error Resume Next

... Access不会告知您阻止添加该行的问题。

通过禁用On Error行来测试我的猜测,与推荐的其他评论一样:

'On Error Resume Next

我怀疑您需要一种策略,首先检查当前 LocationID 值是否已存储在表中。如果存在,请更新现有行。如果不存在,添加一个新行...就像这样......

If DCount("*", "BCIImport", "LocationID=" & Range("B" & r).Value) = 0 Then
    ' add new row
Else
    ' update existing row
End If