在vba中,要获取excel工作簿中的所有工作表的名称,往往需要先打开对应的excel工作簿。
本文介绍用ADOX.Catalog对象直接连接要访问的excel工作簿,实现不打开获取所有的工作表名称。
利用ADOX.Catalog对象可以获取一个数据源的框架目录,对于excel工作簿,它的框架目录包含了工作表的名称,智能表格的名称、内置的隐藏名称等。
步骤如下:
- 使用ADO Connection对象的Open方法先与数据源建立连接,打开数据源。
- 将ADOX.Catalog对象的ActiveConnection属性设置为步骤1中建立的Connection对象。
- 然后遍历将ADOX.Catalog对象的Tables属性,既可以获取相应数据源的Table。
以下是获取一个excel工作簿文件的所有工作表名称的代码:
Sub QQ1722187970() Dim sFN As String sFN = Excel.Application.GetOpenFilename() If Len(sFN) Then Dim arrName() Dim objCatalog Set objCatalog = VBA.CreateObject("ADOX.Catalog") Dim sVersion As String sVersion = Excel.Application.Version Dim sConStr As String '创建连接字符串 If sVersion <= 12 Then sConStr = "Provider='Microsoft.Jet.OLEDB.4.0';Data Source=" & sFN & ";Extended Properties='Excel 8.0;HDR=YES'" Else sConStr = "Provider='Microsoft.ACE.OLEDB.12.0';Data Source=" & sFN & ";Extended Properties='Excel 12.0;HDR=YES'" End If Dim oConStr Set oConStr = CreateObject("ADODB.Connection") '使用Connection连接数据源 oConStr.Open sConStr With objCatalog '关联Connection对象 Set .ActiveConnection = oConStr Dim oTable For Each oTable In .Tables Dim sName As String sName = oTable.Name '提取工作表名称 If Right(sName, 1) = "$" Then Debug.Print sName ReDim Preserve arrName(k) arrName(k) = Left(sName, Len(sName) - 1) k = k + 1 End If Next End With Set oConStr = Nothing End If End Sub
发表评论