我们有一个传统的Access数据库,我们可以访问前端和报告。我们处于一个我们想要导出的位置,并通过Excel操纵报告中的数据。但是,我们的问题是导出到Excel功能已被禁用。
我知道如果我知道数据库后端的位置,我可以通过ADO或DAO设置引用,但由于没有与原始开发人员联系,这不是&# 39; t possible。
我能想到解决这个问题的唯一方法是,是否有某种方法可以通过Windows API循环遍历当前打开的Application对象?从那里设置参考。
这可能吗?
修改
我设法从Excel中检索Access hWnd,但我似乎无法将hWnd传递给FindWindowEx API,因为我可以使用Excel应用程序。
答案 0 :(得分:1)
经过一番工作,我已经提出了以下工作代码。引用数据库的实际代码远小于我使用API和hWnd的尝试。
我已经包括打印表格和字段以证明它有效。我很惊讶这是多么直白......!
'Requires References To:
'Access Object Library
'DAO Object Library
Sub GetTables()
Dim obj As Object 'Access Application
Dim db As Database 'Database
Dim tbl As TableDef 'Table
Dim rs As Recordset 'Recordset
Dim strTable As String 'Table Name
Dim strSQL As String 'SQL for Recordset
Dim fld As Field 'Field
'Get The Currently Open Access Application Object
'Ensure There Is Only One Open To Return The Desired Result
Set obj = GetObject(, "Access.Application")
'Get The Database Of The Application
Set db = obj.CurrentDb
'Loop Tables In Database
For Each tbl In db.TableDefs
'Get Table Name
strTable = tbl.Name
'Ignore Hidden Access Tables
If Left(strTable, 4) <> "MSys" Then
'Print Name Of Table
Debug.Print strTable
'Create SQL For Recordset Of Table
strSQL = "SELECT " & strTable & ".* FROM " & strTable & ";"
'Create Recordset
Set rs = db.OpenRecordset(strSQL)
'Loop Fields In Recordset
For Each fld In rs.Fields
'Print Name Of Field
Debug.Print " " & fld.Name
Next fld
End If
Next tbl
End Sub