我有一个Access数据库,其中包含一个名为 InventoryAvail 的表。我想在Access中按一个按钮并从特定的Excel文件导入特定的Listobject以填充 InventoryAvail 表。
我需要在按钮事件上添加什么vba代码?
Docmd.Transferspreadsheet
无效,因为我不想要电子表格中的所有数据,我只想要特定的Listobject中的内容。
Excel文件名为广告资源,位于我的桌面上。工作表名为广告资源。
Listobject名为可用,有两列:Part, Qty
。
InventoryAvail 表格有两列:PartNumber
和Quantity
。
我需要将Excel Listobject 可用中的数据导入Access表 InventoryAvail
答案 0 :(得分:4)
你是对的,由于某种原因,DoCmd.TransferSpreadsheet
对命名范围不起作用。我可以通过从中提取地址来破解它,但我必须打开工作簿。
无论如何,我无法看到打开工作簿的方法
这对你有用。
<强>步骤:强>
AddNew
方法这是代码
Public Sub AddInventory()
On Error GoTo Err_Handler
Const IMPORT_TABLE As String = "InventoryAvail"
Const IMPORT_FILE As String = "yourspreadsheetfullpathname"
Const SHEET_NAME As String = "Sheet1"
Const LISTBOX_NAME As String = "List1"
Dim xlApp As Object
Dim xlBook As Object
Dim rs As DAO.Recordset
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.WorkBooks.Open(IMPORT_FILE, , True) ' open as readonly
Dim xlList As Variant
Dim intRow As Integer
' creates an array from ListObject values
xlList = xlBook.Worksheets(SHEET_NAME).ListObjects(LISTBOX_NAME).DataBodyRange.Value
xlBook.Close
xlApp.Quit
Set xlApp = Nothing
Set rs = CurrentDb.OpenRecordset(IMPORT_TABLE)
With rs
For intRow = LBound(xlList) To UBound(xlList)
Debug.Print xlList(intRow, 1) & ": " & xlList(intRow, 2)
.AddNew
.Fields(0).Value = xlList(intRow, 1)
.Fields(1).Value = xlList(intRow, 2)
.Update
Next intRow
.Close
End With
Set rs = Nothing
Exit Sub
Err_Handler:
MsgBox Err.Description
End Sub
答案 1 :(得分:1)
如果您只知道ListObject名称,除了打开Excel文件之外没有其他方法,如 @dbmitch 答案中所述,但如果您知道ListObject范围,则只能将此范围内的数据传输到你的表没有使用Excel.Application
对象,只需像这样使用SELECT:
INSERT INTO InventoryAvail (PartNumber, Quantity)
SELECT *
FROM [Inventory$D3:E24]
IN "C:\Users\YourName\Desktop\Inventory.xlsx" [Excel 12.0;HDR=YES;IMEX=0];
这比通过对象
要快得多<强>更新强>
只是想通了,可以按名称查询命名范围。像这样的语法:
INSERT INTO InventoryAvail (PartNumber, Quantity)
SELECT *
FROM [Available]
IN "C:\Users\YourName\Desktop\Inventory.xlsx" [Excel 12.0;HDR=YES;IMEX=0];
请注意,此语法适用于命名范围,对于表格,此类数据选择不起作用。如果将指定范围分配给与表相同的范围,也不会使用命名范围。但是可以定义命名范围,包括表范围,但不完全相同