我在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;
}
,LocationID
和Priority1
(其具有正确的名称,但用于概括......)
我还有一个Excel 2010电子表格,可以将此信息导出到Access中。它的作用是遍历Excel和Access中的Priority2
列,并为所有匹配的字段着色。然后,它会检查LocationID
和Priority1
列以查看是否已填充任何行,并将未填充的行着色。这部分工作正常。
它应该做什么 next 是将从Excel着色的两个Priority2
列中的值复制到Access表中。这种情况没有发生,我不确定为什么。
整个代码相当长,所以这里只是关于传递值的部分。我可以添加任何其他可能有用的代码。
Priority
我不是VBA程序员,所以任何建议都会很棒。
答案 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