访问VBA - 导入问题

时间:2016-03-29 10:38:07

标签: excel vba excel-vba ms-access access-vba

我将一些数据从Excel导入Access,我面临一些奇怪的问题。

问题:

我正在使用DoCmd.TransferSpreadsheet方法将Excel数据导入Access,如下所示:

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "Excel_Data", "Filename", True

这" Excel_Data" table不是预先创建的,因此Access会在它自己创建它。为什么?如果我预先创建它,那么用户必须以完全相同的顺序从Excel导入数据到目标表(Excel中的列A是Access等中的第1行..)。

但是如果您没有预先创建It,那么Access会在Excel中创建任何表格,您可以根据列名称仅导入您希望的数据。现在,这就是它被困的地方....

我不知道为什么,但是对于我喜欢的其他所有Imports,Access只创建文本字段 - 然后我的导入到目标表工作。

但是在其中一个Imports Access中创建了一个Number字段,然后Import into destination table不再工作了。所有Excel数据都格式化为通用。

有人知道如何避免这种情况吗?

基本上我只想根据列名将Excel数据导入Access,无论Excel中的列顺序如何。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我建议使用这样的查询而不是TransferSpreadsheet

SELECT * INTO Table1 
  FROM [Sheet1$D3:E24] 
    IN "C:\Temp\Test.xls" [Excel 12.0;HDR=YES;IMEX=1];

注意,IMEX = 1允许您禁止数据类型猜测,Access将始终创建文本字段。

此外,您还可以从指定范围的电子表格中导入数据,并使用WHERE子句过滤不必要的数据

答案 1 :(得分:0)

感谢所有答案,但我已经解决了这个问题。在执行导入时避免任何问题的最佳方法是在DoCmd.TransferSpreadsheet方法完成后使用ALTER Table命令。我只是将我的所有列都更改为Text格式,将所有其他表格更改为Text字段,现在每次操作数据都可以正常工作。