Enumeratoren: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Pwania (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Enumeratoren == Enumeratoren werden als Long-Werte hinterlegt. ' Enumeratoren geben uns die Möglichkeit, Parameter sinnvoll zu benennen und vorzugeben. '…“) |
Pwania (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Category:vba-wiki]] | |||
== 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 |
Aktuelle Version vom 28. Januar 2023, 00:30 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