1
我有以下Excel VBA代码,直到我将Access(2007)数据库转换为Access(2010)数据库后才能正常工作。我已经使用Access(2010)中的一些新功能来改进我的数据库,但现在我的Excel宏将无法运行。我收到以下消息。在Excel 2010中从Access 2010中的特定记录读取特定字段
运行时错误3343 Unreconized数据库格式
我想修复可能是一个简单的办法,但我不是一个程序员,所以我在迷失....在此先感谢您的帮助 。
Sub Get_Hardware() 'Retrieves hardware weights from Access database
'********Note: If program fails to run, in the visual basic editor, under tools, references, you may
' need to have "Microsoft DAO 3.6 Object Library" downloaded**********
' ******* May also need to register DAO 3.6 if it does not apear in the selectable list by doing the following.
' 1. Open Window's start menu and select "Run"
' 2. Paste the following into the run windo and tell it to run it....
' regsvr32 "c:\program files\common files\microsoft shared\dao\dao360.dll"
Do While Not IsEmpty(ActiveCell.Offset(0, 0))
DAOCopyFromRecordSet "\\fil-ict-07\s0052491$\Engineering\Mass Properties Database (Access 2010)\Mass Properties Database (2010).accdb", "Hardware", "Part Number", ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End Sub
___________________________________________________________________________________________
Public Sub DAOCopyFromRecordSet(DBFullName As String, TableName As String, _
FieldName As String, TargetRange As Range)
Dim db As Database, UW, MC, Des, WQ As Recordset
Dim intColIndex As Integer
Dim MatCode As String
Set TargetRange = TargetRange.Cells(1, 3)
Set db = OpenDatabase(DBFullName)
'SQL Query
Set UW = db.OpenRecordset("SELECT Std_Parts.UnitWeight FROM Std_Parts WHERE (((Std_Parts.[Part Number]) = '" & _
ActiveCell.Offset(0, 0).Value & "'))", dbReadOnly)
Set MC = db.OpenRecordset("SELECT Std_Parts.Material_Code FROM Std_Parts WHERE (((Std_Parts.[Part Number]) = '" & _
ActiveCell.Offset(0, 0).Value & "'))", dbReadOnly)
Set Des = db.OpenRecordset("SELECT Std_Parts.Description FROM Std_Parts WHERE (((Std_Parts.[Part Number]) = '" & _
ActiveCell.Offset(0, 0).Value & "'))", dbReadOnly)
Set WQ = db.OpenRecordset("SELECT Std_Parts.Qual FROM Std_Parts WHERE (((Std_Parts.[Part Number]) = '" & _
ActiveCell.Offset(0, 0).Value & "'))", dbReadOnly)
' write recordset
TargetRange.CopyFromRecordset UW
Set TargetRange = TargetRange.Cells(1, 0)
TargetRange.CopyFromRecordset Des
Set TargetRange = TargetRange.Cells(1, 3)
TargetRange.CopyFromRecordset MC
Set TargetRange = TargetRange.Cells(1, 22)
TargetRange.CopyFromRecordset WQ
ActiveCell.Offset(0, 6).Select
ActiveCell.Formula = "=RC[-4]*RC[-1]"
GoOn:
ActiveCell.Offset(0, -6).Select
Set UW = Nothing
Set MC = Nothing
Set Des = Nothing
Set WQ = Nothing
db.Close
End Sub
如果我保留Microsoft Office 12.0 Access数据库引擎对象库,DAO命令是否可以工作? – 2012-08-07 20:55:02
他们应该这样做,Microsoft Office 12.0 Access数据库引擎对象是DAO库的最新版本。我添加此参考时,您的代码适用于我。 – Fionnuala 2012-08-07 21:09:40