如何使用DoCmd.TransferSpreadsheet方法从电子表格导入数据时覆盖Access中的表?

时间:2014-12-05 18:02:26

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

当我使用DoCmd.TransferSpreadsheet方法从Excel电子表格导入数据时,我无法弄清楚如何在Access中覆盖当前表。下面的代码将导入的数据附加到table1,而我想用导入的数据覆盖它。

    Sub AccImport()
        Dim s As Long: s = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row
        Dim acc As New Access.Application
        acc.Visible = True
        acc.OpenCurrentDatabase "F:\dbs\myDB.accdb"
        acc.DoCmd.TransferSpreadsheet _
        TransferType:=acImport, _
        SpreadSheetType:=acSpreadsheetTypeExcel12Xml, _
        TableName:="table1", _
        Filename:=Application.ActiveWorkbook.FullName, _
        HasFieldNames:=True, _
        Range:="Sheet1$A1:P" & s
        acc.CloseCurrentDatabase
        acc.Quit
        Set acc = Nothing
    End Sub

1 个答案:

答案 0 :(得分:1)

在致电TransferSpreadsheet之前,放弃 table1 中的现有数据:

acc.OpenCurrentDatabase "F:\dbs\myDB.accdb"
acc.CurrentDb.Execute "DELETE FROM table1;", 128 ' dbFailOnError = 128
acc.DoCmd.TransferSpreadsheet ...

如果目标表的结构必须更改为接受来自TransferSpreadsheet的新数据,则可以先删除该表,然后允许TransferSpreadsheet使用新结构重新创建它。您可以执行DROP TABLE table1;或使用DoCmd.DeleteObject方法删除该表。