如何查询访问权限并将其链接到excel中的工作表
Posted
技术标签:
【中文标题】如何查询访问权限并将其链接到excel中的工作表【英文标题】:How to query access and link it to a sheet in excel 【发布时间】:2014-12-03 06:39:40 【问题描述】:我正在做一个项目,但我遇到了障碍。我在 excel 中有一个表,我想通过将表链接到 excel 中的工作表来运行查询,然后将报告存储到 excel 表中。我很接近可以运行访问查询并将访问中已经存在的表存储在 excel 中,但是如果其中一个表位于我的 excel 表中,我不知道该怎么做。有人知道将访问表链接到 Excel 工作表的 vba 代码吗?
我正在参考以下链接,它让我非常接近但不是一路。
http://www.myengineeringworld.net/2013/10/running-access-queries-from-excel-vba.html http://www.globaliconnect.com/excel/index.php?option=com_content&view=article&id=173:import-export-data-from-access-to-excel-using-ado&catid=79&Itemid=475
Private Sub CommandButton1_Click()
'--------------
'DIM STATEMENTS
Dim strMyPath As String, strDBName As String, strDB As String, strSQL As String
Dim i As Long, n As Long, lastRow As Long, lFieldCount As Long
'instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection
'--------------
'THE CONNECTION OBJECT
strDBName = "REPORT.MDB"
strMyPath = "C:\Program Files\SETROUTE 9.2.0\DATA"
strDB = strMyPath & "\" & strDBName
'Connect to a data source:
'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For Access 2007 (.accdb database) use the ACE Provider: "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:="Provider = Microsoft.ACE.OLEDB.12.0; data source=" & strDB
'--------------
'OPEN RECORDSET, ACCESS RECORDS AND FIELDS
Dim ws As Worksheet
'set the worksheet:
Set ws = ActiveWorkbook.Sheets("Cables721")
'Set the ADO Recordset object:
Set adoRecSet = New ADODB.Recordset
'Opening the table named SalesManager:
strTable = "Cables with Incomplete Vias"
adoRecSet.Open "", Source:=strTable, ActiveConnection:=connDB, CursorType:=adOpenStatic, LockType:=adLockOptimistic
'--------------
'COPY RECORDS FROM THE EXCEL WORKSHEET:
'Note: Columns and their order should be the same in both Excel worksheet and in Access database table
lFieldCount = adoRecSet.Fields.Count
'determine last data row in the worksheet:
lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
'start copying from second row of worksheet, first row contains field names:
For i = 2 To lastRow
adoRecSet.AddNew
For n = 0 To lFieldCount - 1
adoRecSet.Fields(n).Value = ws.Cells(i, n + 1)
Next n
adoRecSet.Update
Next i
'--------------
'close the objects
adoRecSet.Close
connDB.Close
'destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub
【问题讨论】:
如果你能发布一些你的代码,它会有所帮助。 发布了一些我正在使用的测试,以尝试做我想做的事情 你必须在代码中做链接还是可以使用链接表管理器?什么版本的 MS-Access? 【参考方案1】:尝试使用连接字符串:
Sub Button1_Click()
Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Documents and Settings\XXXXXX\My Documents\my_access_table.accdb"
strSql = "SELECT Count(*) FROM mytable;"
cn.Open strConnection
Set rs = cn.Execute(strSql)
MsgBox rs.Fields(0) & " rows in MyTable"
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
如果您的目标数据库是 ACCDB 格式,则 Provider 部分必须是 Provider=Microsoft.ACE.OLEDB.12.0。 Provider=Microsoft.Jet.OLEDB.4.0 仅适用于较旧的 MDB 格式。
另请参考:How to query a MS-Access Table from MS-Excel (2010) using VBA
您还可以手动将表格添加为来自 excel 的连接 - 在数据选项卡下
【讨论】:
以上是关于如何查询访问权限并将其链接到excel中的工作表的主要内容,如果未能解决你的问题,请参考以下文章
将一个excel工作纸中的公式复制到另一个excel工作纸而不链接
如何从我的 phpmyadmin 表中复制一列并将其粘贴到我的 Excel 工作表中?
在通过 ADO SQL 的 VBA Excel 中,我如何才能“仅引用一次”记录并将其链接到另一个以避免调用相同的记录?