如何查询访问权限并将其链接到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 中检索数据并将其存储在 Access 中

如何从访问将 2 个查询导出到 Excel 中的单个工作表

将 Excel 工作表中的数据插入到链接的访问表中

将一个excel工作纸中的公式复制到另一个excel工作纸而不链接

如何从我的 phpmyadmin 表中复制一列并将其粘贴到我的 Excel 工作表中?

在通过 ADO SQL 的 VBA Excel 中,我如何才能“仅引用一次”记录并将其链接到另一个以避免调用相同的记录?