VBA-Funktionen – ausgewählte Stiefkinder

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Autor: Karl Donaubauer, Wien

Es gibt einige VBA-Funktionen, die sehr nützlich sind, aber so gut wie keinen Bekanntheitsgrad haben. Das liegt vor allem daran, dass diese Funktionen von ihren Erschaffern nur sehr stiefmütterlich behandelt werden – z. B. im Falle neuer Funktionen, die in der Online-Hilfe von Access einfach nicht unter den Neuheiten zu finden sind. Daher ist es kaum verwunderlich, dass diese Funktionen von Access-Entwicklern recht selten eingesetzt werden. Anders ist dies bei Word-Programmierern, die aufgrund ihrer Textlastigkeit meist gut mit diesen Funktionen vertraut sind. Damit auch Sie in Zukunft von diesen Stiefkindern profitieren können, finden Sie im vorliegenden Beitrag eine Beschreibung interessanter, aber verwaister VBA-Funktionen.

Alle Funktionen, die hier behandelt werden, sind Teil der VBA-Bibliothek (Datei: vbe6.dll bzw. Vorgänger/Nachfolger) und zwar in den Klassen Interaction (Choose, Switch) und String (alle anderen).

Sie vollbringen keine weltbewegenden Dinge, können aber verschiedene Operationen vereinfachen, die oft mit viel zu komplizierten Konstruktionen oder Workarounds gelöst werden.

Schon lange Bestandteil von VBA bzw. bereits von Access-Basic sind die Funktionen Choose, Switch und StrComp ab Access 1.0, StrConv ab Access 95. Neu ab VBA 6 d. h. ab Access 2000 sind InStrRev, Join, Replace, Split und StrReverse.

Das Schattendasein dieser neueren Funktionen ist nicht verwunderlich. Sie werden, wenn überhaupt, nur durch Zufall z. B. im Objektkatalog (siehe Bild 1) oder in der Online-Hilfe gefunden. Sie treten jedoch nicht in der Liste der Neuheiten in der ohnehin mangelhaften Online-Hilfe von Access 2000 oder Access 2002 auf. In Tabelle 1 finden Sie eine Zusammenstellung der vorgestellten Funktionen.

Funktion

Wirkung

Choose

Auswahl eines Eintrags einer Liste in Abhängigkeit vom Index

Switch

Anzeige des ersten wahren Ausdrucks einer Liste

InStrRev

Ausgabe der letzten Position einer Zeichenfolge, die eine bestimmte Zeichenkette enthält

Replace

Ersetzen einer Zeichenfolge durch eine andere

StrComp

Vergleich zweier Zeichenfolgen

StrConv

Umwandlung einer Zeichenfolge nach bestimmten Regeln

Join

Aneinanderhängen der Teile eines Arrays

Split

Zerlegen einer Zeichenfolge in einzelne Teile eines Arrays

StrReverse

Umdrehen einer Zeichenfolge

Tab. 1: VBA-Funktionen und deren Wirkung

Die Funktion Choose gibt den durch den Index festgelegten Wert aus der angebotenen Auswahlliste zurück. Die Syntax lautet folgendermaßen:

Bild 1: Der Objektkatalog (hier von Access 2000) zeigt bekannte und wenig bekannte Funktionen relativ übersichtlich mit ihrer Klassenzugehörigkeit.

Bild 2: Formular mit Optionsgruppe

Choose(Index, Auswahl1, [Auswahl2... [, Auswahl-n]])

Folgendes Beispiel zeigt die Funktionsweise der Funktion:

Ergebnis = Choose(3, "A", "B", "C", "D")

Als Ergebnis gibt die Funktion den 3.Eintrag (“C”) aus. Eine sinnvolle Verwendung in der Praxis findet die Funktion Choose im Zusammenhang mit Werten, die man in Formularen mithilfe von Optionsgruppen eingibt.

Ein Beispiel ist die Bewertung der Zahlungsmoral von Kunden, die man in einem Tabellenfeld namens Zahlungsmoral vom Typ Zahl mit der Größe Byte speichern kann. Die Werteskala ist 1, 2, 3, 4, 5 – im Sinne von sehr gut, gut, normal, schlecht und sehr schlecht.

Zur Eingabe im Formular wird man hier eine Optionsgruppe verwenden (siehe Bild 2). Die Rückverwandlung in Text – z. B. zum Drucken in einem Bericht – erfolgt meist mit If-Then- oder Select-Case-Konstruktionen. Eine bloße Umwandlung von Zahlen in Texte funktioniert jedoch einfacher mit der Funktion Choose.

Um im Code des Berichtes Zugriff auf das Tabellenfeld Zahlungsmoral zu haben, muss das Feld im Bericht vorhanden sein. Die Eigenschaft Sichtbar des Feldes wird auf Nein eingestellt, denn statt des Inhalts des Tabellenfeldes soll ja der Text angezeigt werden. Zur Anzeige des Textwertes wird ein ungebundenes Textfeld txtMoral im Detailbereich eingefügt.

Im Ereignis Beim Formatieren des Detailbereiches benötigt man dann nur noch eine Codezeile für die Umwandlung der Zahl in Text (s. Quellcode 1). Bild 3 zeigt die Verwendung der Funktion Choose in einem Bericht.

Bild 3: Bericht mit Bewertung als Text

Private Sub Detailbereich_Format(Cancel As Integer, _    FormatCount As Integer)
    Me!txtMoral = Choose(Me!Zahlungsmoral, "sehr gut", _        "gut", "normal", "schlecht", "sehr schlecht")
End Sub

Quellcode 1

Die Funktion Choose lässt sich nicht nur in VBA, sondern auch in Ausdrücken z. B. in einem Steuerelementinhalt verwenden. In dieser deutschen Version heißt die Funktion Wählen. So kann man in obigem Beispiel die Darstellung der Textwerte noch einfacher auch über den folgenden Steuerelementinhalt des Steuerelementes txtMoral regeln:

=Wählen([Zahlungsmoral]; "sehr gut"; "gut";"normal";"schlecht"; "sehr schlecht")

Manche mühsame und schwer lesbare Wenn-Konstruktion kann dadurch ersetzt werden – nicht nur in Steuerelementinhalten und bei anderer Verwendung in Formularen und Berichten. Die Funktion Choose lässt sich auch in Kriterien von Abfragen einsetzen.

Die Funktion Switch gibt den ersten Ausdruck aus einer Liste zurück, der wahr ist. Sie hat die folgende Syntax:

Switch(Ausdr1, Wert1[, Ausdr2, Wert2 [, Ausdr-n,Wert-n]])

Das folgende Beispiel beschreibt die Funktionsweise der Funktion:

Ergebnis = Switch(RgDatum     < #1/1/2002#, "DM", RgDatum < #3/1/2002#,"DM/EUR",RgDatum >=#3/1/2002#,"EUR")

Wenn das Rechnungsdatum vor dem 1.1.2002 liegt, wird DM zurückgegeben. Falls dieser erste Ausdruck nicht wahr ist, sondern der zweite, d. h. das Rechnungsdatum liegt vor dem 1.3.2002 (in amerikanischer Schreibweise Monat/Tag/Jahr), wird DM/EUR ausgewählt. Falls das Rechnungsdatum später liegt, wird der dritte Wert EUR gewählt.

Es werden übrigens immer alle Ausdrücke durchlaufen, auch wenn stets nur der erste zutreffende ausgewählt wird.

Daher gibt es z. B. einen Fehler, falls in irgendeinem der Ausdrücke eine Division durch 0 erfolgt.

Die Funktion Switch findet praktische Anwendung, wenn mit komplexeren Kriterien als bloß einer aufsteigenden Zahl (wie bei Choose) aus einigen Optionen ausgewählt werden soll.

Function fctAnrede(strAnr As String)
    fctAnrede = Switch(strAnr Like "Herr*", _    "Sehr geehrter " & strAnr, strAnr Like "Frau*", _    "Sehr geehrte " & strAnr, strAnr = "", _    "Sehr geehrte Damen und Herren!")
End Function

Quellcode 2

Public Function fctFileExt(strPfad As String)
    Dim intStart As Integer
    Dim strDateiname As String, strExtension As String
    ''Position des letzten Backslashes ermitteln
    intStart = InStrRev(strPfad, "\", , _        vbTextCompare) + 1
    ''Dateiname aus dem Pfad extrahieren
    strDateiname = Mid(strPfad, intStart)
    ''Position des letzten Punktes ermitteln
    intStart = InStrRev(strPfad, ".", , _        vbTextCompare) + 1
    ''Dateierweiterung aus dem Pfad extrahieren
    strExtension = Mid(strPfad, intStart)
    MsgBox "Die Datei heißt ''" & strDateiname & _        "''. Die Extension lautet ''" _        & strExtension & "''."
End Function

Quellcode 3

Das erste Beispiel ist eine Funktion, bei der es darum geht, Anreden für einen Serienbrief zu erzeugen. Je nachdem, ob der Ansprechpartner männlich, weiblich oder unbekannt ist, gibt die Funktion eine passende Anrede zurück (s. Quellcode 2).

Durch die Verwendung des Operators Like und des Platzhalters * wird sichergestellt, dass auch Kurzanreden mit Titel wie Herr Direktor, Frau Dr. usw. korrekt behandelt werden.

Der Aufruf der Funktion sieht so aus:

fctAnrede ("" & FeldnameMitDerKurzanrede)

Steht im Feld mit der Kurzanrede z. B. Frau Vorsitzende, so gibt die Funktion Sehr geehrte Frau Vorsitzende zurück. Ist das Feld mit der Kurzanrede hingegen leer, trifft die dritte Variante zu und es wird Sehr geehrte Damen und Herren! zurückgeliefert.

Die Funktion Switch lässt sich wie Choose auch in Ausdrücken verwenden und heißt dann Schalter.

Das folgende Beispiel setzt ein Feld namens Umsatz voraus. Ein Steuerelement könnte dann folgenden Inhalt haben:

=Schalter([Umsatz] < 10000; "zu wenig"; ([Umsatz] Zwischen 10000 Und 50000; "ok"; [Umsatz] > 50000; "sehr gut")

Je nach der Höhe des Wertes im Feld Umsatz wird der passende Text angezeigt.

Ob man Switch oder besser Wenn verwenden sollte, hängt vor allem von der Anzahl der zur Auswahl stehenden Varianten ab. Sobald etwa eine Wenn-Anweisung mehrfach verschachtelt werden müsste, ist die Funktion Switch übersichtlicher.

Die Funktion InStrRev gibt die letzte Position zurück, an der eine Zeichenfolge innerhalb einer anderen Zeichenfolge auftritt. Mit der InStrRev-Funktion kann also geprüft werden, an welcher Stelle bestimmte Zeichen in einem Text zuletzt vorkommen.

Die Funktion hat die folgende Syntax:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar