访问 VBA 动态 Excel 导入

Posted

技术标签:

【中文标题】访问 VBA 动态 Excel 导入【英文标题】:Access VBA Dynamic Excel Import 【发布时间】:2018-10-19 09:01:23 【问题描述】:

我正在尝试将 Excel 电子表格动态导入 Access。问题是,我需要导入一个特定的工作表(这部分已整理),但我在导入一个名称逐月更改的工作表时遇到问题。

代码示例:

DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12Xml, "MonthSales", FileName, 1, "Sales_Month!"

"Sales_Month!" 是我需要动态的地方。如果工作表始终具有相同的名称,我可以直接导入它。所以我的问题是,我可以使用某种通配符导入它吗?

例如:"Sales_*!"

注意:此 Excel 工作簿有多个工作表。

【问题讨论】:

在 Excel VBA 中,您可以循环访问 Worksheets 并检查当前工作表的名称是否为 Like "Sales_*!"。在 Access VBA 中大概可以使用等效的东西。 我完全同意@Jean-FrançoisCorbett 的观点,我赞成他/她的评论。循环遍历所有工作表,检查所有名称,直到找到所需的名称,然后激活它。然后,一旦激活,您就可以使用DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12Xml, "MonthSales", FileName, 1, ActiveSheet.Name 【参考方案1】:

这应该是一个简单的解决方案,使用 Left 运算符在 for 循环中查找 Excel 工作表名称:

Dim xls As New Excel.Application, sht As String, Wkb As Workbook, Wksh As Worksheet
Set Wkb = xls.Workbooks.Open(FileName)

For Each Wksh In Wkb.Worksheets
  if left(Wksh.Name, 6) = "Sales_" then
      DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12Xml, "MonthSales", FileName, 1, Wksh.Name
      Exit For
  end if
Next Wksh

Wkb.Close
xls.Quit
Set Wkb = Nothing
Set xls = Nothing
Exit Sub

【讨论】:

为了使这段代码正常工作,我认为用户必须添加对 Microsoft Excel 对象库的引用,因为它是从 Access 执行的。还 ¿ 没有约束力? ¿在做Set Wkb = xls.Workbooks.Open(FileName)之前不需要先做Set xls = New Excel.Application吗?

以上是关于访问 VBA 动态 Excel 导入的主要内容,如果未能解决你的问题,请参考以下文章

从 excel 导入到具有更多字段的访问表 (vba)

访问 - VBA - 无法导入新的 excel 文件 - 但打开一次后可以

访问 VBA 以拆分 Excel 中的所有合并单元格

将 Excel 文件导入 Access VBA 时更改数据类型

导入规范访问 vba

在 VBA excel 中动态设置单元格的 NumberFormat [关闭]