将数据导入访问时,如何跳过Excel中的前几行



我是访问2016 VBA的新手,并且我一直将Excel数据导入访问表。

,但问题是我需要跳过Excel表的前三行,以便可以将Excel数据直接保存到访问表中。我该如何实现?

这是Am Am用来将Excel数据导入表中的代码:

DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True

还有一件事是,由于它有所不同,因此无法指定Excel单元的范围。

MS访问在无序的数据集上运行,因此,您不能依靠查询返回的记录顺序,或者从外部导入数据的顺序来源,例如电子表格或文本文件。

您只能依靠查询返回的记录顺序,当时订单被严格定义了order by子句。

因此,如果您希望继续使用TransferSpreadsheet方法来完成任务,则需要确定一种识别要省略的记录的方法,该记录与导入记录的顺序无关。这样,您可以将所有记录导入表中,然后运行delete查询,以实现记录识别逻辑作为其选择标准。

我可以看到的唯一其他方法是使用ActiveX与MS访问的Excel工作表接口,在工作表中的行上迭代,并填充记录集,同时省略遇到的前三行。

  • 对于此类解决方法,我在Excel文件中使用了前三行的删除。您可以在Excel中记录一个宏,然后在访问中导入文件之前调用预处理。

  • 其他选项是使用命名范围,您可以直接导入它们以访问。

  • 最适合您的解决方案是使用DoCmd.Transferspreadsheet范围规范,如下所述-https://learn.microsoft.com/ru-ru/office/vba/vba/api/api/access.docmd.transfersferspreadsheet/p>

DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4:G12"

在这种情况下,您将导入指定的范围,例如从第四行到12th

一些缺点是:

    • 您应该知道要导入或导入空白的记录数量,然后进一步删除它们
    • 如下所述,它不会导入更多的65536行 - MS访问数据导入65000行限制的问题,尽管使用了非Excel 2003功能和文件

如果您始终希望跳过前三行,则可以将起始位置更改为 DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4",然后使用下面的代码接收所有输入,直到击中一个空单元格。

DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4"
'first line checks if this cell is empty or not
Do While xlc.Value <> ""
    'takes the value of the current cell
    WO_Num(lngColumn) = xlc.Offset(0, 0).Value
    'shifts the selected cells one row downwards
    Set xlc = xlc.Offset(1, 0)
    lngColumn= lngColumn + 1 
Loop

最新更新