Enumeratoren: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „== Enumeratoren == Enumeratoren werden als Long-Werte hinterlegt. ' Enumeratoren geben uns die Möglichkeit, Parameter sinnvoll zu benennen und vorzugeben. '…“)
 
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
== Enumeratoren ==
== 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
 
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 ==


' 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
' 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

Version vom 10. Oktober 2018, 15:18 Uhr

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