Zjistěte, zda list existuje v sešitu pomocí jazyka VBA v aplikaci Microsoft Excel

Anonim

Může nastat čas, kdy budete muset zkontrolovat, zda existuje list, který jste vytvořili nebo odstranili v sešitu v makru / kódu VBA. To můžeme snadno provést pomocí funkce / makra. Existuje několik způsobů, jak zkontrolovat, zda list existuje.

V tomto článku se budeme zabývat následujícími způsoby:

1. Uživatelem definovaná funkce známá jako UDF
2. Dílčí rutina prostřednictvím pole se zprávou

První možnost: Funkce definovaná uživatelem

Následující snímek obsahuje několik názvů listů a zkontrolujeme, zda názvy listů ve sloupci A existují.

Chcete -li zjistit, zda konkrétní list existuje, musíme ke spuštění editoru VB provést následující kroky

  • Klikněte na kartu Vývojář
  • Ze skupiny kódů vyberte Visual Basic

  • Zkopírujte níže uvedený kód do standardního modulu
Možnost Explicitní funkce WorksheetExists (ByVal WorksheetName As String) As Boolean Dim Sht As worksheet for every Sht In ThisWorkbook.Worksheets If Application.Proper (Sht.Name) = Application.Proper (WorksheetName) Then WorksheetExists = True Exit Function End If Next Sht WorksheetExists = Funkce falešného konce 

  • Abychom to mohli zkontrolovat, použijeme UDF v buňce B2 jako
  • = WorksheetExists (A2)

  • Na výše uvedeném obrázku „MasterSheet“ v našem ukázkovém sešitu neexistuje; vzorec tedy dal odpověď jako False

Vysvětlení kódu:

Tato funkce přebírá hodnotu pro „WorksheetName“ z makra, které provádí jiné činnosti. Pokud to potřebujete změnit podle kódu, můžete.

Pro každý Sht v ThisWorkbook.Worksheets a Další Sht jsou počáteční a koncové části smyčky.

Pak Pokud Application.Proper (Sht.Name) = Application.Proper (WorksheetName) Then

WorksheetExists = True

Zkontroluje, zda se název listu shoduje s názvem listu předaným z hlavního makra. Pokud ano, WorksheetExists je True a můžeme tuto funkci ukončit. Jinak se WorksheetExists = False vrátí zpět do hlavního makra. Smyčka jde od 1. listu k dalšímu, dokud nejsou zkontrolovány všechny listy.

Druhá možnost: Dílčí rutina prostřednictvím pole se zprávou

Můžeme mít normální podprogram, který volá UDF, a pokud je zadaný list nalezen, zobrazí se okno se zprávou „list existuje“; pokud nebyl nalezen, objeví se msgbox, „list nebyl nalezen“.

Chcete -li zkontrolovat, zkopírujeme následující kód do standardního modulu:

Funkce WorksheetExists2 (název listu jako řetězec, volitelně wb jako sešit) jako boolean Pokud wb není nic, pak nastavte wb = thisWorkbook s wb při chybě Pokračovat další WorksheetExists2 = (.Sheets (název listu) .Name = název_ listu) Při chybě GoTo 0 Konec s funkcí konec Sub FindSheet () If WorksheetExists2 ("Sheet1") Then MsgBox "Sheet1 is in this workbook" Else MsgBox "Jejda: List neexistuje" End If End Sub 

Po spuštění makra „FindSheet“ se nám zobrazí následující okno se zprávou, pokud list existuje:

Pokud list neexistuje, zobrazí se následující okno se zprávou:

Podobně můžeme mít jednoduchou smyčku IF, která zkontroluje, zda list existuje, a poté provede určité akce.

Dílčí test () Dim ws As worksheet for each ws In ThisWorkbook.Worksheets If ws.Name "Main" Then ws.Range ("A1"). Value = ws.Name Else ws.Range ("A1"). Value = " HLAVNÍ PŘIHLÁŠKOVÁ STRÁNKA „End If Next ws End Sub 

  • K otestování výše uvedeného makra musíme vytvořit název listu „Hlavní“. Toto makro je velmi jednoduché
  • Prochází každým listem v sešitu
  • Poté zkontroluje, zda název listu není HLAVNÍ
  • Pokud je HLAVNÍ, zobrazí text, například „HLAVNÍ PŘIHLÁŠKOVÁ STRÁNKA“ v A1 daného listu, v opačném případě zobrazí název listu v buňce A1

  • Toto je jen další způsob, jak zkontrolovat, zda list existuje. Pokud existuje, proveďte akci A, pokud ne, akci B

Závěr: Můžeme zjistit, zda list v našem sešitu existuje nebo ne; můžeme použít UDF nebo podprogram podle svého pohodlí.

Pokud se vám naše blogy líbily, sdílejte je se svými přáteli na Facebooku. A také nás můžete sledovat na Twitteru a Facebooku.

Rádi bychom od vás slyšeli, dejte nám vědět, jak můžeme zlepšit, doplnit nebo inovovat naši práci a zlepšit ji pro vás. Napište nám na e -mail