我是Access 2016 VBA的新手,并且我一直在将Excel数据导入Access表。
但是问题是我需要跳过Excel工作表的前三行,以便可以将Excel数据直接保存到Access表中。我该如何实现?
以下是用于将Excel数据导入表中的代码:
DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True
还有一件事是,由于Excel单元格的范围不尽相同,因此无法指定范围。
答案 0 :(得分:0)
MS Access对无序数据集进行操作,因此,您不能依赖查询返回的记录顺序,也不能依赖于从电子表格或文本文件等外部源将数据导入表中的顺序。
只有在严格定义了包含order by
子句的排序后,您才能依赖查询返回的记录的顺序。
因此,如果您希望继续使用TransferSpreadsheet
方法来执行任务,则需要确定一种识别要省略的记录的方法,该方法与导入的记录的顺序无关。这样,您可以将所有记录导入到表中,然后运行delete
查询,以记录识别逻辑作为其选择标准。
我能看到的唯一另一种方法是使用ActiveX与MS Access从MS Access进行交互,迭代工作表中的行,并填充记录集,而忽略遇到的前三行。
答案 1 :(得分:0)
对于这种解决方法,我使用了Excel文件中前三行的删除。您可以在Excel中记录一个宏,然后在Access中导入文件之前调用preprocesing。
其他选项是要使用的命名范围,您可以将其直接导入到Access。
最适合您的解决方案是使用DoCmd.Transferspreadsheet
范围规范,如此处所述-https://docs.microsoft.com/ru-ru/office/vba/api/access.docmd.transferspreadsheet
DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4:G12"
在这种情况下,您将导入指定的范围,例如从第4行到第12 。
一些缺点是:
答案 2 :(得分:0)
如果您始终希望跳过前三行,则只需将起始位置更改为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