【问题标题】:Excel VBA to transfer records to Access tableExcel VBA 将记录传输到 Access 表
【发布时间】: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。代码在我拥有的另一个文件中完美运行,除了更改数据库名称/位置/表等之外,我没有在这个文件中做任何不同的事情,和字段名称。

标签: excel ms-access vba


【解决方案1】:

只要您的表格设置在相同的列顺序中,您就可以从字面上复制/粘贴它们,如果它只是一个 1-time 的东西。

如果它不是一次性的,但仍然是 Access 数据库,您可以通过 External Data 部分链接 excel 文件,然后根据两个表中的某个键执行 UPDATEAPPEND 查询.

  1. 在向导中选择File name
  2. 选择Link to the data source by creating a linked table 单选按钮
  3. 点击OK

一旦您链接了Excel 文件,您就可以像对待任何其他表格一样对待它。

【讨论】:

  • 不幸的是,这个文件将是一个工作文档,所以它不是一次性的。不过谢谢。
猜你喜欢
  • 2018-09-09
  • 1970-01-01
  • 2014-08-30
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
相关资源
最近更新 更多