从 Excel 访问导入,DoCmd.TransferSpreadsheet acImport

问题描述

我从 SAP-BI 服务器创建了一些数据,它向我发送了一个 Excel-2013 文件,然后我将此 excel 文件导入 Access-2013 以进行进一步处理。

我在 VBA 代码中找到了导入数据的字符串,它看起来像这样:

DoCmd.TransferSpreadsheet acImport,"Ttable",fileName,True,"abclist$"

access中的表名为Ttable excel电子表格命名为abclist

到目前为止,当前流程运行良好。然而,最近数据量增加到超过 104 万个原始数据(这似乎是 Excel 可以在一个电子表格中处理的最大原始数据数量),然后 SAP-BI 将剩余的数据导出到名为 abclist 的第二个电子表格中( 1)

如果有两个电子表格,我如何更改 VBA 代码以动态允许两个电子表格,如果 excelfile 中只有一个电子表格,它会继续工作?

解决方法

打开excel文件,将工作表名称作为数组导入并执行命令。

Dim App As Object
Dim vFn() As Variant,v As Variant
Dim Wb As Object,Ws As Object
Dim n As Integer

Set App = CreateObject("Excel.Application")
Set Wb = App.workbooks.Open(FileName)
For Each Ws In Wb.worksheets
    n = n + 1
    ReDim Preserve vFn(1 To n)
    vFn(n) = Ws.Name & "$"
Next Ws
Wb.Close (0)
Set Wb = Nothing
App.Quit
Set App = Nothing

For Each v In vFn
    DoCmd.TransferSpreadsheet acImport,"Ttable",FileName,True,v
Next v
,

我想将excel数据导入到access中。 通常有两个电子表格“AAA”和“BBB” 这些电子表格将导入 Access 中的两个表(名称为 tAAA 和 tBBB)。

但有时如果数据量很大,会出现第3个电子表格名称“AAA(1)”

如果不存在,如何忽略导入 3:rd 电子表格名称 AAA(1)? 如果丢失,我会收到错误消息。

DoCmd.TransferSpreadsheet acImport,"tAAA",fileName,"AAA$"
DoCmd.TransferSpreadsheet acImport,"AAA(1)$"
DoCmd.TransferSpreadsheet acImport,"tBBBs","BBB$"