使用INSERT INTO ..... SELECT将Excel导入Access

时间:2017-02-08 08:49:12

标签: ms-access access-vba

我正在尝试将数据从Excel导入Access。

使用

选择Excel文件
Function selectFile()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd
        If .Show Then
            selectFile = .SelectedItems(1)
        Else
            End
        End If
    End With

    Set fd = Nothing
End Function

所选文件将始终只有1个工作表

到目前为止,我一直在使用TransferSpreadsheet

DoCmd.TransferSpreadsheet acImport, 8, "Summary", selectFile(), True

一切都很好。但是,所选文件可能包含其他不需要的数据列。我只需要第一列数据中的数据,第1行是标题行,excel表中的标题与Access“摘要”表中的前4列标题相匹配(“OFFER”,“DESCRIPTION”,“Total AMRM” “,”RMACCNUM“)。

另一个问题是带有数据的工作表可以命名为“Sheet1”,“Summary”,或者其他东西!

我已经尝试过INSERT INTO ...... SELECT .... FROM但是无法正确获取语法。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

使用临时位置来映射(和过滤)问题,让您更好地控制流程

DoCmd.TransferSpreadsheet acImport, 8, "TempSummary", selectFile(), True

然后检查映射,并插入数据:

CurrentDB.Execute "INSERT INTO Summary (OFFER, DESCRIPTION, [Total AMRM], RMACCNUM) " & _   
"SELECT(OFFER, DESCRIPTION, [Total AMRM], RMACCNUM) " & _   
"FROM TempSummary"

最后,删除Temp表:

CurrentDb.TableDefs.Delete "TempSummary"

答案 1 :(得分:0)

您最好链接电子表格。

然后创建一个使用链接表作为源的简单选择查询。在这里,根据需要重命名(别名)字段,并进行简单的转换和过滤,如将文本数据转换为数字,将文本日期转换为真实日期,排除空值等等。

保存此查询并将其用于进一步处理,例如将记录附加到现有表格。