Benutzerdefinierte Prozeduren mit eigener Intellisense

By , 23. Februar 2012

Oft erstellt man Prozeduren wo man vordefinierte Parameter übergibt. Z.B. habe ich letztens eine Prozedur erstellt welche durch 2 Schaltflächen aufgerufen wird. Eine Schaltfläche für „vor“ und eine für „zurück“. Der Parameter für die Richtung habe ich vorgegeben, 1 für vor, 2 für zurück.
Wissen Sie Wochen später wenn Sie diese Prozedur aufrufen welcher Wert was ist?
Wäre es nicht besser Sie hätten dafür eine Intellisense?

Nichts leichter als das. der nachfolgende Text und Code zeigt wie das geht:
Zuerst legen Sie dort wo die Prozedur existiert, also Modul oder Formular-Modul, im Deklarationsbereich einen Enum (Aufzählungsdatentyp) an der der Datentyp für den zu übergebenen Parameter darstellt.

Private Enum Richtung
    vor = 1
    zurück = 2
End Enum


Sie können natürlich auch den Enum generell in ein Modul plazieren, beachten Sie dabei aber den Gültigkeitsbereich!
Wenn Sie diesen in einem Formular-Modul aufrufen muss der Enum dann als Public deklariert werden.

Die eigentliche Prozedur könnte dann z.B. so aussehen:

Private Function Schaltung(ByRef zeiger As Long, ByVal direction As Richtung) As Long
    Select Case direction
        Case 1
            Schaltung = zeiger + 1
        Case 2
            Schaltung = zeiger - 1
            If Schaltung < 0 Then Schaltung = 0
    End Select
End Function

Die Funktion könnte so aufgerufen werden:

Private Sub Form_Load()
    Dim zeiger As Long
    zeiger = Schaltung(zeiger, vor)
    MsgBox zeiger
End Sub

Zusammengefasst kann man sagen, dass erstens Enums überall dort eingesetzt werden können, wo der Wert der ein Parameter annehmen kann, begrenzt und überschaubar ist. Und zweitens wird dadurch die Wartbarkeit der Anwendung erhöht. Weitere Beispiele für Enums sind Wochentage, Monatsnamen, Jahreszeiten, ja/nein Parameter (0/1) die nicht vom Typ Boolean sind, Codierte Farbwerte, etc.

Bis dahin
Andreas Vogt ©2012

Leave a Reply

You must be logged in to post a comment.

OfficeFolders theme by Themocracy