Szukając odpowiedzi na pytanie z tytułu nasuwa się jedna prosta- otworzyć plik :) ...jednak zdecydowanie nie tego rozwiązania poszukujemy w tym momencie. Chciałbym zaprezentować technikę, która umożliwia odczyt i weryfikację nazw wszystkich arkuszy we wskazanym skoroszycie, ale bez otwierania tego pliku.
Aby wykonać powyższe zadanie będziemy wykorzystywać zaawansowaną technikę z obszaru ADODB okreśalną mianem ADOX (Activex Data Objects Extension). Wykorzystanie ADOX umożliwia nam odczyt parametrów bazy danych oraz modyfikację struktury bazy danych przez usuwanie tabel, dodawanie nowych tabel o określonych polach, itp. Szereg informacji na temat ADOX znaleźć można na stronie Microsof MSDN, np.
tutaj.
W celu stworzenia skutecznego rozwiazania naszego zadania pierwszy krok naszego działania to ustawienie referencji do biblioteki ‘Microsoft ADO Ext. 2.8 for DDL and Security’ (przypomnę, referencję ustawiamy w środowisku VBA >> Menu >> Tools >> References... >> odnajdujemy bibliotekę, zaznaczamy i akceptujemy OK). Potrzebna będzie nam także podstawowa biblioteka ADO w celu ustanowienia połączenia z naszym plikiem Excela, czyli dodatkowo ustawiamy referencję do zasobów ‘Microsoft ActiveX Data Objects 2.8 Library’.
Poniżej prezentuję rozwiązanie, które listuje do okna Immediate wszystkie arkusze wskazanego pliku XLSM. Dodatkowe informacje na temat nowych obiektów i ich rola zostały opisane w formie komentarzy w kodzie poniżej.
01 | Sub ListaWszystkichArkuszy() |
03 | Dim adoConn As ADODB.Connection |
06 | Dim adoxCat As ADOX.Catalog |
09 | Dim adoxTbl As ADOX.Table |
11 | Dim strConnString As String |
14 | strConnString = "Provider=Microsoft.ACE.OLEDB.12.0; " & _ |
15 | "Data Source=" & ThisWorkbook.Path & "\test_file.xlsm" & ";" & _ |
16 | "Extended Properties=Excel 12.0 Xml;" |
18 | Set adoConn = New ADODB.Connection |
19 | adoConn.Open strConnString |
23 | Set adoxCat = New ADOX.Catalog |
24 | Set adoxCat.ActiveConnection = adoConn |
27 | For Each adoxTbl In adoxCat.Tables |
28 | Debug.Print adoxTbl.Name |