Excel VBA将记录转移到Access表
问题描述:
我是新来这个论坛,我希望有人能帮助我。我将附上我用于参考的代码,顺便一直为我工作。Excel VBA将记录转移到Access表
我使用Excel vba将数据从Excel传输到Access表中。出于某种原因,代码似乎运行完美,直到“与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
答
只要你的表是你可以从字面上复制/同一列的顺序设置它们粘贴如果它只是一个1次的事情。
如果不是一次性的事情,但仍然是一个Access数据库,你可以通过External Data
部分链接的Excel文件,然后以此为基础进行一些关键的这两个表中的UPDATE
或APPEND
查询。
- 在向导中选择
File name
- 一旦你的
Excel
文件链接,你可以把它就像任何其他表中选择Link to the data source by creating a linked table
单选按钮 - 点击
OK
。
+0
不幸的是,这个文件将是一个工作文档,所以它不是一次性的。谢谢你。 –
+0
检查更新。 –
我怀疑你循环不循环。你可以在'With rs'上抛出一个断点(点击行并按F9),运行该程序,并查看它是否在该行中断。如果它不是,那么你的循环条件是失败'绝对(范围(“HZ2”))> 0' – JNevill
你使用DAO?然后我将'Dim db as DAO.Database'指定为'rs'。此外,尝试'dbOpenDynaset'而不是'dbOpenTable' –
嗯......它似乎不会中断...只是继续设置rs = Nothing。 (我使用F8来穿过它)。有关如何解决的任何建议?就像我之前提到的,我已经将此代码用于其他几张工作表,并且从来没有遇到过问题。非常感谢 –