我是访问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