使用Excelmacros返回所有访问(.mdb)表的列表

我有Sheet 1范围B1中定义的mdb文件位置。 这个值是:

“C:\用户\用户\桌面\ 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连接实现额外的filter不返回所有的临时文件和Msys对象,或者这是我只需要导入后过滤。

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

试试这个代码:

 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 

有没有办法在ADODB连接实现额外的filter不返回所有的临时文件和Msys对象,或者这是我只需要导入后筛选。

不,你将不得不遍历表名并简单地忽略系统(“MSys …”)和临时表(“〜…”)。