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