Excel VBA 将数据导出到 MS Access 表 - 扩展
Posted
技术标签:
【中文标题】Excel VBA 将数据导出到 MS Access 表 - 扩展【英文标题】:Excel VBA to Export Data to MS Access Table - Extended 【发布时间】:2015-04-20 15:44:17 【问题描述】:我正在尝试使用我在 *** here 上看到的其他线程之一中描述的方法。
使用该线程中描述的方法(获得绿色检查)时,我在运行代码时遇到错误。错误弹出一个没有内容的空白消息框。
有几点要提:
(1) 我已确保在 Excel 中选择并激活 Microsoft Access 14.0 对象库。
(2) 我正在 Excel 中从我的数据库工作表中运行子过程。
(3) 然后我在 Excel 中的向导工作表(单独的工作表)中的代码过程中运行 AccImport 过程。
EXCEL 电子表格设置
我还不能使用屏幕截图,因为我是社区的新手,但数据库工作表字段范围设置如下。
B1(发生日期)、C1(机器)、D2(单元格)、E2(状态)、F2(问题)、G2(预防/纠正)、H2(分配给)
B2 (15-APR-2015), C2(machine1), D2(cell1), E2 (0), F2(Test), G2 (Corrective), H2 (nameexample1)
访问数据库表设置如下:
表名:MaintenanceDatabase
ID、发生日期、机器、单元格、状态、问题、分配给的预防/纠正措施
这是我从 Excel 中的数据库工作表运行的代码:
Sub AccImport()
Dim acc As New Access.Application
acc.OpenCurrentDatabase "C:\Users\brad.edgar\Desktop\DASHBOARDS\MAINTENANCE\MaintenanceDatbase.accdb"
acc.DoCmd.TransferSpreadsheet _
TransferType:=acImport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:="MaintenanceDatabase", _
Filename:=Application.ActiveWorkbook.FullName, _
HasFieldNames:=True, _
Range:="Database$B1:H2"
acc.CloseCurrentDatabase
acc.Quit
Set acc = Nothing
End Sub
来自运行 AccImport 的其他工作表对象的代码片段:
Public Sub DeleteSelectedRecord()
Dim CurrentSelectedIndex As Integer
' Assign the currently selected index to CurrentSelectedIndex
CurrentSelectedIndex = [Database.CurrentIndex]
' Move the ListBox Selector
If [Database.CurrentIndex].Value = [Database.RecordCount] Then
'Last item on the list
[Database.CurrentIndex].Value = [Database.CurrentIndex].Value - 1
End If
'Copy to Access Database
Database.AccImport
' Delete the entry
Database.ListObjects("Database").ListRows(CurrentSelectedIndex).Delete
End Sub
希望有人能解释我为什么会出错。
提前感谢您的帮助。
干杯,
布拉德
【问题讨论】:
【参考方案1】:我从未尝试过以您提到的方式从 excel 写入访问。下面是我的首选方法。您需要使用 Microsoft DAO 对象库,但使用 DAO 对象,您可以执行更新、插入、拉取等几乎任何您需要完成的任务。
Sub SaveCustomer_Defaults()
Dim strSQL As Variant
Dim accApp As Object
Dim srcs As Variant
Dim msg1 As Variant
Sheets("Lists").Visible = True
Sheets("Lists").Select
Range("T6").Select
x = Range("T500000").End(xlUp).Row
For i = 6 To x
Cells(i, 20).Select
If Environ("USERNAME") = Cells(i, 23).Value Then
'location of the access db
srcs = "C:\\user\desktop\Detail_1.accdb" ''' Live location '''
Set accApp = GetObject(srcs, "access.Application")
'write your sql to pull the table along with the cell values
strSQL = "Select * from US_CustomID "
strSQL = strSQL & " where( [AssignedTo] = '" & Sheets("Lists").Cells(i, 21)
strSQL = strSQL & "' and [Tab] = '" & Sheets("Lists").Cells(i, 24)
strSQL = strSQL & "' and [RepID] = '" & Sheets("Lists").Cells(i, 23)
strSQL = strSQL & "');"
Set db = DAO.OpenDatabase(srcs)
Set rs = db.OpenRecordset(strSQL)
On Error Resume Next
rs.Edit
rs![Occurrence Date] = Sheets("Lists").Cells(i, 25)
rs![Machine] = Sheets("Lists").Cells(i, 26)
rs![Cell] = Sheets("Lists").Cells(i, 27)
rs![Status] = Sheets("Lists").Cells(i, 28)
rs![Issue] = Sheets("Lists").Cells(i, 29)
rs![Preventative/Corrective] = Sheets("Lists").Cells(i, 30)
rs![Assigned To] = Sheets("Lists").Cells(i, 31)
rs.Update
If Not rs Is Nothing Then rs.Close
Set rs = Nothing
Set db = Nothing
accApp.DoCmd.RunSQL strSQL
accApp.Application.Quit
End If
Next i
Sheets("Lists").Visible = False
End Sub
【讨论】:
以上是关于Excel VBA 将数据导出到 MS Access 表 - 扩展的主要内容,如果未能解决你的问题,请参考以下文章
VBA Excel - 从 MS Access 将列名保存到电子表格
使用 vba 将 MS Access 查询输出到 Excel