我试图使用我在stackoverflow here上发布的其他一个线程中描述的方法。
当使用该线程中描述的方法(得到绿色检查)时,我在运行代码时遇到错误。该错误弹出一个没有内容的空白消息框。
有几件事需要提及:
(1)我确保在Excel中选择并激活Microsoft Access 14.0对象库。
(2)我正在Excel中的数据库工作表中运行子过程。
(3)然后我在我的代码程序中从Excel中的向导工作表(单独的工作表)中运行AccImport过程。
EXCEL SPREADSHEET SETUP
我不能使用屏幕截图,因为我是社区新手,但数据库工作表字段范围设置如下。
B1(发生日期),C1(机器),D2(单元),E2(状态),F2(发行),G2(预防/纠正),H2(指定)
B2(15-APR-2015),C2(机器1),D2(单元1),E2(0),F2(测试),G2(校正),H2(名称示例1)
访问数据库表如下设置:
表名: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
希望有人可以解释为什么我会收到错误。
提前感谢您的帮助。
干杯,
布拉德
答案 0 :(得分:0)
我从来没有尝试过以你提到的方式从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