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.
