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

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2007.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Verwenden Sie unsere benutzerdefinierten VBA-Funktionen, statt diese selbst zu programmieren.

Techniken

VBA

Voraussetzungen

Access 97 oder höher

Beispieldatei

Südwind.mdb

Shortlink

436

VBA-Funktionssammlung

In dieser Rubrik liefern wir Ihnen in jeder Ausgabe von Access im Unternehmen einige interessante VBA-Funktionen, mit denen Sie den Funktionsumfang von VBA erweitern können.

Montag und Sonntag ermitteln

Einige Anwendungsfälle benötigen das Datum eines Montags oder Sonntags für eine Kalenderwoche oder ein gegebenes Datum. Die beiden Routinen aus Listing 1 und Listing 2 erledigen Letzteres: Sowohl MontagErmitteln als auch SonntagErmitteln erwarten ein Datum als Parameter, zu dem die Routine dann den vorherigen Montag oder den folgenden Sonntag berechnet. Ein Einsatzfall ist etwa der Monatskalender in Berichtsform aus [1].

Listing 1: Montag einer Woche zu einem gegebenen Datum ermitteln

Public Function MontagErmitteln(dateReferenzdatum As Date) As Date

     Dim dateTemp As Date

     dateTemp = dateAusgangsdatum

     Select Case Weekday(dateTemp)

         Case Is > 2

             MontagErmitteln = _
DateAdd("d", dateTemp, -Weekday(dateTemp) + 2)

         Case 2

             MontagErmitteln = dateTemp

         Case 1

             MontagErmitteln = DateAdd("d", dateTemp, -6)

     End Select

End Function

 

Listing 2: Sonntag einer Woche zu einem gegebenen Datum ermitteln

Public Function SonntagErmitteln(dateReferenzdatum As Date) As Date

     Dim dateTemp As Date

     dateTemp = dateAusgangsdatum

     Select Case Weekday(dateTemp)

         Case 1

             SonntagErmitteln = dateTemp

         Case Is > 1

             SonntagErmitteln = DateAdd("d", dateTemp, 8 - Weekday(dateTemp))

     End Select

End Function

Kalenderwoche ermitteln

Ebenfalls in [1] wird die Funktion Kalenderwoche benötigt, die zu einem Referenzdatum die passende Kalenderwoche ermittelt (s. Listing 3). Die Funktion setzt voraus, dass die erste Woche diejenige ist, die vier Tage des neuen Jahres enthält. Der Übergabeparameter ist vom Typ Date, der Rückgabewert ist eine Integer-Zahl.

Listing 3: Kalenderwoche zu einem Datum ermitteln

Function Kalenderwoche(dateReferenzdatum As Date) _
As Integer

     Kalenderwoche = _
Format(dateReferenzdatum, "ww", vbMonday, _
vbFirstFourDays)

     If Kalenderwoche > 52 Then

         If Format(dateReferenzdatum + 7, _
"ww", vbMonday, vbFirstFourDays) = 2 Then

             Kalenderwoche = 1

         End If

     End If

End Function

Datum für SQL-Anweisung aufbereiten

Mit Datumswerten in SQL-Anweisungen gibt es immer wieder Probleme. Allerdings nicht, wenn Sie einen Ausdruck wie diesen hier verwenden:

SELECT KalenderdatumID, Kalenderdatum

FROM tblKalenderdaten WHERE Kalenderdatum = #2006/1/1#;

Nun müssen Sie ihn nur noch per VBA zusammenstellen, und das geht ganz einfach: Eine wichtige Rolle spielt dabei die Funktion SQLDatum aus Listing 4. Sie erwartet einen Datumswert als Parameter und wandelt diesen mit der Format-Funktion in einen Ausdruck im passenden Format um. In einer VBA-Routine setzen Sie diese Funktion etwa wie in der Beispielprozedur aus Listing 5 ein.

Listing 4: Datum in eine SQL-taugliche Form bringen

Public Function SQLDatum(dateDatum As Date) As String

    SQLDatum = Format(dateDatum, "\#yyyy\-mm\-dd\#")

End Function

 

Listing 5: Beispiel für den Einsatz der Funktion SQLDatum

Public Sub SQLAnweisungMitDatum()

     Dim dateDatum As Date

     Dim strSQL As String

     dateDatum = "1.1.2006"

     strSQL = "SELECT * FROM tblDaten WHERE Beispieldatum = " & _
SQLDatum(dateDatum)

     Debug.Print strSQL

End Sub

GUIDs erstellen

Wenn Sie einmal mit GUIDs arbeiten, möchten Sie diese gegebenenfalls schnell per VBA-Funktion erstellen können. Da VBA in dieser Hinsicht keine Standardfunktion liefert, reichen wir diese nach. Die Funktion CreateGUID erfordert den Einsatz zweier API-Funktionen und eines passenden Typs (s. Listing 6). Der Aufruf lautet etwa Debug.Print CreateGuid und liefert einen Wert wie {C568B4F7-D926-465B-B56D-FA417DD7F5C7}.

Listing 6: GUID erstellen

Private Declare Function CoCreateGuid Lib "ole32.dll" (tGUIDStructure As _

     GUID) As Long

Private Declare Function StringFromGUID2 Lib "ole32.dll" (rGUID As Any, _

     ByVal lpstrClsId As Long, ByVal cbMax As Long) As Long

Private Type GUID

     Data1 As Long

     Data2 As Integer

     Data3 As Integer

     Data4(0 To 7) As String * 1

End Type

Function CreateGUID() As String

     Const clLen As Long = 50

     Dim sGUID As String

     Dim tGUID As GUID

     Dim bGuid() As Byte

     Dim lRtn As Long

     If CoCreateGuid(tGUID) = 0 Then

         bGuid = String(clLen, 0)

         lRtn = StringFromGUID2(tGUID, VarPtr(bGuid(0)), clLen)

         If lRtn > 0 Then

             sGUID = Mid$(bGuid, 1, lRtn - 1)

         End If

         CreateGUID = sGUID

     End If

End Function

Quellen

[1] Monatskalender als Bericht drucken, Ausgabe 1/2007, Shortlink 434

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:

Download

Download

Die .zip-Datei enthält folgende Dateien:

VBAFunktionen97.mdb

VBAFunktionen.mdb

Beispieldateien downloaden

© 2003-2015 André Minhorst Alle Rechte vorbehalten.