Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2002.

Diesen Artikel jetzt als PDF plus Beispieldatenbank herunterladen?

Wenn Sie sich jetzt für den Newsletter anmelden, erhalten Sie in Kürze eine E-Mail mit dem Artikel im PDF-Format plus Beispieldatenbank.

Hier anmelden:973520

E-Mail:

Anrede:

Vorname:

Nachname:

VBA-Funktionen - ausgewählte Stiefkinder

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 (s. Abb. 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

Einträge auswählen mit Choose

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

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

Abb. 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 (s. Abb. 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). Abb. 3 zeigt die Verwendung der Funktion Choose in einem Bericht.

Abb. 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.

Wahrheitsfindung mit Switch

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 & "'."

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Diesen Artikel jetzt als PDF plus Beispieldatenbank herunterladen?

Wenn Sie sich jetzt für den Newsletter anmelden, erhalten Sie in Kürze eine E-Mail mit dem Artikel im PDF-Format plus Beispieldatenbank.

Hier anmelden:

E-Mail:

Anrede:

Vorname:

Nachname:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.