我已经制作了一些代码来将excel表中的数据插入到访问数据库中 - 我的代码如下:
Sub AddData()
Dim Cn As ADODB.Connection
Set Cn = New ADODB.Connection
'lets connect to the workbook first, I tested this, it works for me
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sample.xls;Extended Properties=Excel 8.0;" _
& "Persist Security Info=False"
' Append data from Sheet1 of workbook to Table1 of mydb.mdb:
Cn.Execute "INSERT INTO tblSales IN 'C:\Users\User\Documents\access.mdb' SELECT * FROM [datasheet]"
Cn.Close
Set Cn = Nothing
End Sub
我的问题是,当执行此操作时,我收到错误“Microsoft Jet Engine无法找到对象的路径”数据表“。数据表只是数据在我的工作簿中的工作表的名称。任何帮助非常感谢
答案 0 :(得分:1)
如果您在工作表名称后面加上$符号会发生什么 像这样[datasheet $] ?
答案 1 :(得分:0)
我认为您无法对任何打开的工作簿执行查询。它必须针对文件运行,这意味着您必须提供表单的完整路径,包括文件名。如果您的工作簿“脏”,则需要先保存它。 我宁愿
答案 2 :(得分:0)
据我所见,所有缺失的是数据源的路径和数据表上的字符串:
Data Source=sample.xls;
应阅读,例如:
Data Source=c:\docs\sample.xls;
和
SELECT * FROM [datasheet$]
答案 3 :(得分:0)
xlFilepath = Application.ThisWorkbook.FullName
Sql = "INSERT INTO tblSales " & _
"SELECT * FROM [Excel 12.0 Macro;HDR=YES;DATABASE=" & xlFilepath & "].[datasheet$A1:AK10011] "
cnn.Execute Sql
数据表中的警告表前8行。假设有一个标题(HDR =是) 接下来的6行应包含一个虚拟数据,以定义与访问表列定义等效的列。
答案 4 :(得分:-1)
SELECT语句在数据库本身上运行,但您想从EXCEL发送值。所以你必须使用
cn.Execute "INSERT .... VALUES (" & excelcell_or_variable & ");"
最终在循环中处理所有行/列等。
希望有所帮助
祝你好运编辑...... 不要忘记CHAR和interpunctations周围的引号;我用
' ....
' .... "...VALUES (" & T(Q(MyStringCell)) & T(MyNumCell) & Q(MyLastTextCell) & ");"
' ....
' surrounds a string by single quotes
Private Function Q(Arg as String) As String
Q = "'" & Arg & "'"
Return
' appens a comma to a string
Private Function T(Arg as String) As String
T = Arg & ","
Return
编辑2 我认为在EXCEL中你要插入数据库的值都在一行......
假设您有一个包含多于1行的source_range,则必须为该范围内的每一行触发INSERT语句。您使用.Rows
属性从范围返回单行。并使用.Cells(1, 1)
,.Cells(1,2)
....等等,将多列发送到同一行的INSERT语句中
示例:
Sub Test()
Dim MyRange As Range, MyRow As Range
Set MyRange = Range([B4], [C8]) ' source range
For Each MyRow In MyRange.Rows ' get one row at the time from source range
Debug.Print MyRow.Cells(1, 1), MyRow.Cells(1, 2)
' replace the above by your INSERT statement
Next MyRow
End Sub