【发布时间】:2015-07-24 22:08:03
【问题描述】:
我在 Access 2010 中有一个存储项目信息的表。主要列 - 为此目的 - 是 LocationID、Priority1 和 Priority2(它们有专有名称,但用于概括......)
我还有一个 Excel 2010 电子表格,其中包含要导出到 Access 中的信息。它的作用是遍历 Excel 和 Access 中的 LocationID 列,并为所有匹配的字段着色。然后它检查Priority1 和Priority2 列以查看是否有任何行已填充,并对未填充的行着色。这部分工作正常。
它应该做的下一步是将 Excel 中着色的两个 Priority 列中的值复制到 Access 表中。这没有发生,我不确定为什么。
整个代码相当长,所以这里只是关于传递值的部分。我可以添加任何其他可能有用的代码。
If (Not (IsNull(path))) Then
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & path & ";"
Set rs = New ADODB.Recordset
rs.Open "BCIImport", cn, adOpenKeyset, adLockOptimistic, adCmdTable
On Error Resume Next
Do While Len(Range("B" & r).Formula) > 0
With rs
If Not rs.BOF Then
rs.MoveFirst
End If
If (Range("B" & r).Interior.Color = RGB(0, 255, 255)) Then
.AddNew
.Fields("LocationID") = Range("B" & r).Value
.Fields("Priority1") = Range("C" & r).Value
.Fields("Priority2") = Range("D" & r).Value
.Update
End If
End With
r = r + 1 'advances to next row
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End If
我不是一个 VBA 程序员,所以任何建议都会很棒。
【问题讨论】:
-
注释掉
On Error Resume Next,然后再次运行代码,看看会发生什么。 (我假设您在此代码之前的某个时间点将r设置为有效值?) -
是的,
r在开头定义为r=2。这仍然返回空白字段。 -
一旦你弄清楚错误是什么,将注释掉的
On Error Resume Next行删除。然后在此站点上快速搜索 VBA 中的错误处理。永远不知道发生了什么的最好方法是使用On Error Resume Next。 -
如果您没有收到任何错误但在数据库中获得了空白字段,那么您很有可能只需要指定代码应该使用的工作表 - 即使用
Worksheets("foo").Range(...).Value,而不仅仅是使用Range(...).Value
标签: excel ms-access ms-access-2010 excel-2010 vba