【问题标题】:return a list of all access (.mdb) tables with an excel macro使用 excel 宏返回所有访问 (.mdb) 表的列表
【发布时间】:2016-01-19 15:58:09
【问题描述】:

我在 Sheet1 范围 B1 中定义了一个 mdb 文件位置。这个值是:

“C:\Users\User\Desktop\Test.mdb”

我要做的是生成此文件中所有表的列表并在 excel 中返​​回它。我有一个部分工作的脚本,但它正在返回不需要的项目

我正在解决这个问题:

Sub GetTableNames()

Dim cnn As ADODB.Connection
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table
Dim lRow As Long
Dim szConnect As String

LastRowSetup = Worksheets("Setup").Cells(Rows.Count, 1).End(xlUp).Row 'last row where table names populate

If LastRowSetup < 10 Then
    LastRowSetup = 10 'so we dont accidentally clear important data above this
End If

Sheets("Setup").Range("A10:A" & LastRowSetup & "").ClearContents 'clear old data

fStr = Sheets("Setup").Range("C2").Value 'file location of mdb

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & fStr & ";"

Set cnn = New ADODB.Connection
cnn.Open szConnect
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = cnn

lRow = 10
For Each tbl In cat.Tables
Sheet1.Cells(lRow, 1).Value = tbl.Name
lRow = lRow + 1
Next tbl

cnn.Close
Set cat = Nothing
Set cnn = Nothing

End Sub

但是,它返回了许多不是表名的附加内容。比如

~TMPCLP313341
~TMPCLP74661
Approved_table1
Approved_table2    
MSysAccessStorage
MSysAccessXML
MSysACEs
MSysNameMap
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships

当我实际打开 mdb 时,我看到的只是“表 1”和“表 2”。有没有办法在 ADODB 连接中实现一个额外的过滤器,以不返回所有临时文件和 Msys 对象,或者这是我在导入后只需要过滤的东西。

请注意,我必须设置对 Microsoft 的引用 ADO分机。 2.X 用于 DDL 和安全对象库以及普通 ADO 对象库。

【问题讨论】:

    标签: excel vba ms-access ado


    【解决方案1】:

    试试这个代码:

    For Each tbl In cat.Tables
     If Left(tbl.Name, 4) <> "MSys" And Left(tbl.Name, 1) <> "~" then
      Sheet1.Cells(lRow, 1).Value = tbl.Name
      lRow = lRow + 1
     end if
    Next tbl
    

    【讨论】:

    • 使用.type查看表类型是什么,未测试。
    【解决方案2】:

    有没有办法在 ADODB 连接中实现一个额外的过滤器,以不返回所有临时文件和 Msys 对象,或者这是我在导入后只需要过滤的东西。

    不,您必须遍历表名并忽略系统(“MSys...”)和临时(“~...”)表。

    【讨论】:

    • 您可以访问系统表并使用 SQL 查询将它们排除在外,而不是查看架构,或者使用普通的 ado 和 openschema(tables) 进入记录集,然后过滤记录集
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多