Enumeratoren

Aus VBA-wiki
Wechseln zu: Navigation, Suche

Enumeratoren

Enumeratoren werden als Long-Werte hinterlegt. ' Enumeratoren geben uns die Möglichkeit, Parameter sinnvoll zu benennen und vorzugeben. ' Der Name des Enums sollte auch Teil der Werte sein, damit deren Zugehörigkeit ' jederzeit ersichtlich ist. Public Enum enmSearchScope enmSearchScopeSelection = 4 enmSearchScopeWorksheet = 1 enmSearchScopeWorkbook = 2 enmSearchScopeAllOpenWorkbooks = 3 End Enum Beispiel: Suchen und ersetzen über einen Bereich Public Sub ReplaceInCells(ByVal strFind As String, ByVal strReplace As String, ByVal blnIgnoreCase As Boolean, ByVal lngScope As enmSearchScope) Select Case lngScope Case enmSearchScopeSelection MsgBox "Markierung" Case enmSearchScopeWorksheet MsgBox "Tabelle" Case enmSearchScopeWorkbook MsgBox "Arbeitsmappe" Case enmSearchScopeAllOpenWorkbooks MsgBox "Allen offenen Arbeitsmappen" End Select ' Hier würde das Ersetzen stattfinden End Sub

Stapelbare Enumeratoren

' Stapelbare Enumeratoren können addiert werden, um mehrere Optionen gleichzeitig angeben zu können. ' Dazu müssen die Werte wie hier aus der 2er-Exponenten-Reihe stammen, damit jeder Einzelwert ' später extrahiert werden kann. Public Enum enmMealComponents enmMealComponentBeef = 1 enmMealComponentFish = 2 enmMealComponentPoultry = 4 enmMealComponentPork = 8 enmMealComponentGreens = 16 enmMealComponentSalad = 32 enmMealComponentSoup = 64 enmMealComponentFries = 128 enmMealComponentBread = 256 End Enum Public Sub AssembleMeal(ByVal lngTicketNumber As Long, ByVal lngComponents As enmMealComponents) Dim strMealComponents As String Dim lngExponent As Long, lngTest As Long For lngExponent = 8 To 0 Step -1 ' Rückwärts-Schleife durch die 2er-Exponenten lngTest = 2 ^ lngExponent ' Testwert ist das Ergebnis der Exponentialrechnung If lngTest <= lngComponents Then ' Wenn der Testwert Teil des übergebenen Wertes ist ... Select Case lngTest Case enmMealComponentBeef strMealComponents = strMealComponents & "Rindfleisch " Case enmMealComponentFish strMealComponents = strMealComponents & "Fisch " Case enmMealComponentPoultry strMealComponents = strMealComponents & "Geflügel " Case enmMealComponentPork strMealComponents = strMealComponents & "Schweinefleisch " Case enmMealComponentGreens strMealComponents = strMealComponents & "Grünzeug " Case enmMealComponentSalad strMealComponents = strMealComponents & "Salat " Case enmMealComponentSoup strMealComponents = strMealComponents & "Suppe " Case enmMealComponentFries strMealComponents = strMealComponents & "Pommes " Case enmMealComponentBread strMealComponents = strMealComponents & "Brot " End Select lngComponents = lngComponents - lngTest ' Die gefundene Teiloption wird entfernt If lngComponents = 0 Then Exit For End If Next lngExponent ' Hier würde nun die Speise aus den Komponenten zusammengestellt, ' welche die oben entgegengenommenen Bestandteile enthält ... MsgBox strMealComponents, , "Speise #" & lngTicketNumber End Sub Der Aufruf erfolgt folgendermaßen: Sub TestMealAssembly() AssembleMeal 12345, enmMealComponentFish + enmMealComponentFries + enmMealComponentGreens End Sub