【发布时间】: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 对象库。
【问题讨论】: