Apr 20 2008

Jak sprawdzić czy w skoroszycie istnieje arkusz?

Posted by Bartek

Tags:

Problem:

Jak sprawdzić czy w skoroszycie znajduje się arkusz o danej nazwie.

Czy arkusz znajduje się w skoroszycie roboczym

Odpowiednią funkcję można znaleźć właściwie w każdej dobrej książce o VBA (chociażby w Walkenbachu). Niestety, zwykle autorzy wykorzystują w nich instrukcję On Error Resume Next, którą od pewnego czasu uważam, za jedną z bardziej zdradliwych i staram się jej unikać, gdy tylko to możliwe. Poniżej moja propozycja dla wykorzystująca tylko pętlę. Niech służy;)

Function IsSheetExists(sName As String) As Boolean
   Dim i As Long
   For i = Sheets.Count To 1 Step -1
       If Sheets(i).Name = sName Then
          IsSheetExists = True
          Exit Function
       End If
   Next
   IsSheetExists = False
End Functio

Uwaga! Funkcja przeszukuje nie tylko skoroszyty, ale również arkusze-wykresy.

Czy arkusz znajduje się w skoroszycie X

Powyższa funkcja ma jedną wadę -- zakłada, że nasz arkusz znajduje się w tym samym skoroszycie z którego wywoływany jest kod.  Poniżej funkcja, która sprawdza w czy skoroszyt znajduje się w dowolnym arkuszu (przy okazji korzysta ze znienawidzonego On Error Resume...

 
Function DoesSheetExist(wBook As Workbook, nazwa As String) As Boolean
    On Error Resume Next
    Dim wSheet As Worksheet
    Set wSheet = wBook.Sheets(nazwa)
        If wSheet Is Nothing Then
            DoesSheetExist = False
            Set wSheet = Nothing
            On Error GoTo 0
        Else
            DoesSheetExist = True
            Set wSheet = Nothing
            On Error GoTo 0
        End If
End Function
 

Jak wywołać tą funkcję pokazałem w tym poście przy okazji importu z wielu arkuszy.

Powiązane artykuły:

Filed under : VBA, Wszystkie | No Comments »

Leave a Reply