我有一个名为InventoryAvail的表的Access数据库。我想按Access中的一个按钮,然后从特定的Excel文件导入特定的Listobject来填充InventoryAvail表。
我需要在按钮的事件上添加哪些VBA代码?Docmd.Transferspreadsheet
将不起作用,因为我不想要电子表格中的所有数据,我只想要特定ListObject中的数据。
Excel文件称为Inventory,位于我的桌面上。该工作表名为清单。
Listobject的名称为Available,有两列:Part, Qty
。
InventoryAvail表具有两列:PartNumber
和Quantity
。
我需要将Excel Listobject中的数据可用导入到Access表InventoryAvail中
最佳答案
没错,由于某些原因,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