środa, 22 kwietnia 2015

Funkcja sprawdzająca istnienie arkusza w zewnętrznym pliku Excela? (kontynuacja)

Kontynuując zagadnienie prezentowane przed kilkoma dniami chciałbym zaprezentować podobne rozwiązanie do tam opisanego lecz tym razem oparte o funkcję użytkownika UDF. Cel- funkcja ma zwracać wartości True/False w odpowiedzi na pytanie czy we wskazanym skoroszycie (tu podamy pełną ścieżkę do pliku) istnieje określony arkusz (tu podamy jego nazwę). Poniżej kod funkcji wraz z dodatkowymi komentarzami. Funkcja tej postaci działać będzie zarówno w środowisku VBA jak również w dowolnej komórce Excela.
01Function IsSheetInWorkbook(shName As String, wbFullName As String) As Boolean
02     
03    'Obiekty ADODB i ADOX
04    Dim adoConn As ADODB.Connection
05    Dim adoxCat As ADOX.Catalog
06    Dim adoxTbl As ADOX.Table
07     
08    Dim strConnString As String
09    Dim strSheet As String
10     
11    'Connection String dla pliku excel, sandardowa konfiguracja
12    strConnString = "Provider=Microsoft.ACE.OLEDB.12.0; " & _
13                            "Data Source=" & wbFullName & ";" & _
14                            "Extended Properties=Excel 12.0 Xml;"
15    'tworzymy połączenie
16    Set adoConn = New ADODB.Connection
17        adoConn.Open strConnString
18         
19    'pozostałe powiązania miedzy ADO i ADOX
20    Set adoxCat = New ADOX.Catalog
21    Set adoxCat.ActiveConnection = adoConn
22     
23    'w obszarze obsługi błędów próbujemy przypisac tabelę
24    'do obiektu ADOX.Table
25    'Ważne! arkusze excela wymagaja znaku dolara w nazwie na końcu
26    'aby mogły być traktowane jak tabele baz danych
27     
28    On Error Resume Next
29    Set adoxTbl = adoxCat.Tables(shName & "$")
30     
31    If Err.Number = 0 Then
32        'tabela/arkusz istnieje
33        IsSheetInWorkbook = True
34    Else
35        'tabela/arkusz nie istnieje
36        IsSheetInWorkbook = False
37    End If
38     
39    'zamykamy połączenie i likwidujemy obiekty
40    adoConn.Close
41    Set adoxCat = Nothing
42    Set adoConn = Nothing
43End Function

Brak komentarzy:

Prześlij komentarz