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 
+0

我怀疑你循环不循环。你可以在'With rs'上抛出一个断点(点击行并按F9),运行该程序,并查看它是否在该行中断。如果它不是,那么你的循环条件是失败'绝对(范围(“HZ2”))> 0' – JNevill

+0

你使用DAO?然后我将'Dim db as DAO.Database'指定为'rs'。此外,尝试'dbOpenDynaset'而不是'dbOpenTable' –

+0

嗯......它似乎不会中断...只是继续设置rs = Nothing。 (我使用F8来穿过它)。有关如何解决的任何建议?就像我之前提到的,我已经将此代码用于其他几张工作表,并且从来没有遇到过问题。非常感谢 –

只要你的表是你可以从字面上复制/同一列的顺序设置它们粘贴如果它只是一个1次的事情。

如果不是一次性的事情,但仍然是一个Access数据库,你可以通过External Data部分链接的Excel文件,然后以此为基础进行一些关键的这两个表中的UPDATEAPPEND查询。

  1. 在向导中选择File name
  2. 一旦你的Excel文件链接,你可以把它就像任何其他表中选择Link to the data source by creating a linked table单选按钮
  3. 点击OK

+0

不幸的是,这个文件将是一个工作文档,所以它不是一次性的。谢谢你。 –

+0

检查更新。 –