参考VBA应用程序而不知道其名称/路径

时间:2015-02-17 09:50:59

标签: vba api ms-access reference

我们有一个传统的Access数据库,我们可以访问前端和报告。我们处于一个我们想要导出的位置,并通过Excel操纵报告中的数据。但是,我们的问题是导出到Excel功能已被禁用。

我知道如果我知道数据库后端的位置,我可以通过ADO或DAO设置引用,但由于没有与原始开发人员联系,这不是&# 39; t possible。

我能想到解决这个问题的唯一方法是,是否有某种方法可以通过Windows API循环遍历当前打开的Application对象?从那里设置参考。

这可能吗?

修改

我设法从Excel中检索Access hWnd,但我似乎无法将hWnd传递给FindWindowEx API,因为我可以使用Excel应用程序。

1 个答案:

答案 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