【发布时间】:2017-09-08 15:28:34
【问题描述】:
我是这个论坛的新手,希望有人可以帮助我。我将附上我正在使用的代码以供参考,顺便说一句,它一直对我有用。
我正在使用 Excel vba 将数据从 Excel 传输到 Access 表中。出于某种原因,代码似乎可以完美运行,直到“With rs”,然后它似乎跳过添加值并直接转到 rs.Close。我也没有收到任何错误消息,这对我来说很奇怪。包含代码示例。
如果有人有任何建议,我将不胜感激!
Dim db As Database, rs As Recordset, r As Long
'ESTABLISH DATABASE AND TABLE LOCATION - PRODUCTION
'Prod environment location
'Set db = OpenDatabase("C:\!PITF Docs\Forecasting and Planning\Collection\PITF_Collection.accdb")
' open the database
Set db = OpenDatabase("C:\!PITF Docs\Forecasting and Planning\Collection\PITF_Collection.accdb")
Set rs = db.OpenRecordset("Upload_InternalLabor", dbOpenTable)
' get all records in a table
r = 2 ' the start row in the worksheet
Do While Abs(Range("HZ" & r)) > 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("Class") = Range("DO" & r).Value
.Fields("New_Hire") = Range("DP" & r).Value
.Fields("Name") = Range("DQ" & r).Value
.Fields("Role") = Range("DR" & r).Value
.Fields("Expense_Driver") = Range("DS" & r).Value
.Fields("Comments") = Range("DT" & r).Value
.Fields("Salary") = Range("DU" & r).Value
.Fields("Hire_Date") = Range("DV" & r).Value
.Fields("42741") = Range("DW" & r).Value
.Fields("42755") = Range("DX" & r).Value
.Fields("42769") = Range("DY" & r).Value
.Fields("42783") = Range("DZ" & r).Value
.Fields("Submitter") = Range("HW" & r).Value
.Fields("Timestamp") = Range("HX" & r).Value
.Fields("Total") = Range("HY" & r).Value
.Fields("Abs") = Range("HZ" & r).Value
' add more fields if necessary...
.Update ' stores the new record
End With
r = r + 1 ' next row
Loop
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
【问题讨论】:
-
我怀疑你的循环没有循环。您能否在
With rs上设置断点(单击该行并按 F9),运行该程序,看看它是否在该行中断。如果没有,那么您的循环条件失败Abs(Range("HZ2")) > 0 -
你在使用 DAO 吗?然后我会指定
Dim db as DAO.Database,与rs相同。另外,尝试dbOpenDynaset而不是dbOpenTable -
嗯...它似乎没有中断...只是继续设置 rs = Nothing。 (我使用 F8 逐步完成)。有关如何修复的任何建议?就像我之前提到的,我已经将此代码用于其他几个工作表并且从未遇到过问题。非常感谢
-
看看单元格
HZ2,看看为什么它不像循环要求的那样大于0。我不知道这在您的工作簿或代码的上下文中意味着什么,但这绝对是罪魁祸首。此代码从第 2 行开始并插入数据。也许您的数据现在从不同的行开始,您需要将r=2更改为该行是什么?只是在这里猜测。 -
不幸的是,这些都不起作用。我没有使用 DAO,因为我使用的是 excel 2016。代码在我拥有的另一个文件中完美运行,除了更改数据库名称/位置/表等之外,我没有在这个文件中做任何不同的事情,和字段名称。