Het bepalen van een werkblad Aantal

Lawrence behoefte aan een manier om het aantal van een werkblad, zelfs wanneer het werkblad is hernoemd bepalen. Bijvoorbeeld, als een werkblad is vernoemd sheet11 het is makkelijk genoeg om erachter te komen dat het blad 11. Als hij hernoemt het vel tot januari, Lawrence moet nog een manier om te weten dat dit blad 11.

De oplossing voor dit probleem is best met een door de gebruiker gedefinieerde functie (macro). Er zijn in werkelijkheid twee nummers die de macro kon terugkeren voor elk werkblad. De eerste is de index nummer voor het werkblad. Dit getal staat voor de index van het werkblad werkblad object binnen de Werkbladen collectie. Deze waarde kan worden geretourneerd door een macro ongeveer als volgt:

Functie SheetNumber1 (shtname As String)
Dim SHT Zoals werkblad

Application.Volatile
Voor Elke SHT In ThisWorkbook.Worksheets
Als LCase (sht.Name) = LCase (shtname) Dan
SheetNumber1 = sht.Index
Exit Function
End If
Volgende
SheetNumber1 = -1
End Function

Deze functie, wanneer het wordt gebruikt in een werkblad, wordt het indexnummer van elk werkblad waarvan de naam wordt doorgegeven aan de functie terug te keren. Als de naam die wordt doorgegeven aan de functie niet bestaat in de werkbladen collectie, dan is een waarde van -1 wordt geretourneerd door de functie. Bijvoorbeeld, de volgende in een cel zou de indexwaarde voor het werkblad genaamd "januari" in de collectie retourneren:

= SheetNumber ("Januari")

Het probleem met deze benadering is dat de volgorde van werkblad objecten in de collectie werkbladen kunnen na verloop van tijd veranderen. Zo kunt u niet altijd van uitgaan dat de elfde plaat in de collectie is de plaat die oorspronkelijk was sheet11.

Een meer consistente manier van het uitzoeken van de oorspronkelijke naam voor een werkblad (ongeacht hoe het wordt hernoemd) is het gebruik van wat Visual Basic verwijst als het vel van de "CodeName." Dit is een eigenschap van het werkblad en kan op de volgende manier worden bepaald:

Functie SheetNumber2 (shtname As String)
Dim SHT Zoals werkblad
Dim Stemp als Koord

Application.Volatile
Voor Elke SHT In ThisWorkbook.Worksheets
Als LCase (sht.Name) = LCase (shtname) Dan
Stemp = sht.CodeName
SheetNumber2 = Val (Mid (Stemp, 6, 4))
Exit Function
End If
Volgende
SheetNumber2 = -1
End Function

Het pand CodeName is alleen-lezen in een macro. Het is toegewezen op het moment dat het werkblad wordt gemaakt, maar het is mogelijk dat het handmatig gewijzigd binnen het Visual Basic editor. De codenaam is altijd een string, die de eerste naam die werd toegepast op het werkblad, dus het zal iets als "sheet11" zijn. Zodra de CodeName is ingesteld, zelfs indien het werkblad naam (bijvoorbeeld op "januari"), zal stabiel blijven ("sheet11").

In de macro voorbeeld (SheetNumber2) de woning CodeName wordt toegewezen aan de Stemp variabele. Dit zal meestal, iets als "Sheet3" of "sheet11". Dus, de macro grijpt vervolgens het numerieke waarde van welke begint met het zesde teken (direct na "vel"). Dit is de waarde die wordt geretourneerd door de functie.

ExcelTips is uw bron voor kosteneffectieve Microsoft Excel training. Deze tip (3398) is van toepassing op Microsoft Excel 97, 2000, 2002 en 2003. U kunt een versie van deze tip voor de ribbon-interface van Excel (Excel 2007 en later) vindt u hier: Het bepalen van een werkblad nummer.