Może się zdarzyć, że będziesz musiał sprawdzić, czy istnieje arkusz, który utworzyłeś lub usunąłeś w skoroszycie w makrze / kodzie VBA. Możemy to łatwo zrobić za pomocą funkcji / makra. Istnieje wiele sposobów sprawdzenia, czy arkusz istnieje.
W tym artykule omówimy następujące sposoby:
1. Funkcja zdefiniowana przez użytkownika znana jako UDF
2. Procedura podrzędna przez okno wiadomości
Pierwsza opcja: Funkcja zdefiniowana przez użytkownika
Poniższy zrzut zawiera kilka nazw arkuszy i sprawdzimy, czy nazwy arkuszy w kolumnie A istnieją.
Aby sprawdzić, czy dany arkusz istnieje, musimy wykonać poniższe kroki, aby uruchomić edytor VB
- Kliknij kartę Deweloper
- Z grupy Kod wybierz Visual Basic
- Skopiuj poniższy kod w standardowym module
Option Explicit Function WorksheetExists(ByVal WorksheetName As String) As Boolean Dim Sht As Worksheet dla każdego Sht w ThisWorkbook.Worksheets If Application.Proper(Sht.Name) = Application.Proper(WorksheetName) Then WorksheetExists = True Zakończ funkcję End If Next Sht WorksheetExists = Funkcja fałszywego zakończenia
- W celu sprawdzenia użyjemy UDF w komórce B2 jako
- = Arkusz istnieje(A2)
- Na powyższym obrazku „MasterSheet” nie istnieje w naszym przykładowym skoroszycie; stąd formuła dała odpowiedź jako Fałsz
Wyjaśnienie kodu:
Ta funkcja pobiera wartość „WorksheetName” z makra wykonującego inne czynności. Jeśli chcesz to zmienić zgodnie z kodem, możesz.
Dla każdego Sht w ThisWorkbook.Worksheets oraz Następny Sht są odpowiednio początkową i końcową częścią pętli.
Następnie If Application.Proper(Sht.Name) = Application.Proper(WorksheetName) Then
Arkusz istnieje = Prawda
Sprawdza, czy nazwa arkusza jest zgodna z nazwą arkusza przekazaną z makra głównego. Jeśli tak, WorksheetExists ma wartość True i możemy wyjść z funkcji. W przeciwnym razie WorksheetExists = False jest zwracany z powrotem do głównego makra. Pętla przechodzi od pierwszego arkusza do następnego, aż wszystkie arkusze zostaną sprawdzone.
Druga opcja: podprogram poprzez okno wiadomości
Możemy mieć normalny podprogram, który wywołuje UDF i jeśli określony arkusz zostanie znaleziony, pojawi się okno komunikatu „arkusz istnieje”; jeśli nie znaleziono, wyskakuje msgbox, „sheet not found”.
Aby to sprawdzić, skopiujemy następujący kod do standardowego modułu:
Funkcja WorksheetExists2 (WorksheetExists As String, opcjonalnie wb As Workbook) jako Boolean Jeśli wb jest niczym, a następnie ustaw wb = ThisWorkbook With wb On Error Resume Next WorksheetExists2 = (.Sheets(WorksheetName).Name = WorksheetName) W przypadku błędu Przejdź do 0 Zakończ z funkcją End Sub FindSheet() If WorksheetExists2("Arkusz1") Then MsgBox "Arkusz1 jest w tym skoroszycie" Else MsgBox "Ups: Arkusz nie istnieje" End If End Sub
Po uruchomieniu makra „FindSheet”, jeśli arkusz istnieje, otrzymamy następujący komunikat:
Jeśli Arkusz nie istnieje, otrzymamy następujący komunikat:
Podobnie możemy mieć prostą pętlę IF, która sprawdza, czy arkusz istnieje, a następnie wykonuje określone akcje.
Sub test() Dim ws As Worksheet Dla każdego ws In ThisWorkbook.Worksheets If ws.Name "Main" Then ws.Range("A1").Value = ws.Name Else ws.Range("A1").Value = " GŁÓWNA STRONA LOGOWANIA” Koniec Jeśli dalej Koniec Sub
- Aby przetestować powyższe makro, musimy utworzyć arkusz o nazwie „Main”. To makro jest bardzo proste
- Przechodzi przez każdy arkusz w skoroszycie
- Następnie sprawdza, czy nazwa arkusza roboczego nie jest MAIN
- Jeśli jest to MAIN, wyświetla tekst, taki jak „MAIN LOGIN PAGE” w A1 tego arkusza, w przeciwnym razie wyświetla nazwę arkusza w komórce A1
- To tylko kolejny sposób sprawdzenia, czy arkusz istnieje. Jeśli istnieje, wykonaj czynność A, jeśli nie, czynność B
Wniosek: Możemy określić, czy arkusz istnieje w naszym skoroszycie, czy nie; możemy użyć UDF lub podprogramu zgodnie z naszą wygodą.
Jeśli podobały Ci się nasze blogi, podziel się nimi ze znajomymi na Facebooku. A także możesz śledzić nas na Twitterze i Facebooku.
Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy ulepszyć, uzupełnić lub unowocześnić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail