In dieser Ausgabe unserer Tipps-und-Tricks-Reihe stellen wir Ihnen einige Funktionen vor, die Sie speziell als Entwickler einsetzen können. Sie erfahren beispielsweise, wie Sie neue Versionsnummern ermitteln, eine Versionsnummer auf Gültigkeit prüfen und verschiedene Versionsstände vergleichen, ob eine Datenbank eine .mde/.accde-Datei ist, wie Sie Texte per Code in die Zwischenablage kopieren oder wie Sie Zeichenketten für den Einsatz in URLs vorbereiten.
Versionen fortschreiben
Angenommen, Sie möchten Ihrer Anwendung auf Knopfdruck eine neue Versionsnummer verpassen – beispielsweise, indem Sie diese in das Feld Version einer Optionentabelle schreiben.
Ausgehend davon, dass Sie eine aus vier Elementen bestehende Versionsnummer verwenden (zum Beispiel 1.0.0.7), müssen Sie zunächst festlegen, welche Stelle der Versionsnummer geändert werden soll.
Bei der letzten Stelle ist dies kein Problem: Die wird einfach hochgezählt (etwa von 1.0.0.7 auf 1.0.0.8). Bei allen anderen Stellen ist sind jedoch auch noch die folgenden Stellen auf 0 einzustellen, zum Beispiel von 1.0.0.8 auf 1.0.1.0, von 1.0.1.9 auf 1.1.0.0 oder auch von 1.2.3.4 auf 2.0.0.0.
Die Funktion aus Listing 1 erledigt dies, indem sie einfach die Position der zu ändernden Stelle abfragt und als Ergebnis die neue Versionsnummer zurückliefert.
Listing 1: Neue Versionsnummer ermitteln
Public Function NeueVersion(strVersion) As String Dim strVersionsstufen() As String Dim intVersionsebene As Integer intVersionsebene = InputBox("Aktuelle Versionsnummer: " & strVersion & vbCrLf _ & "Welche Stelle erhöhen", "Neue Version", 4) strVersionsstufen() = Split(strVersion, ".") Select Case intVersionsebene Case 1 strVersionsstufen(0) = strVersionsstufen(0) + 1 strVersionsstufen(1) = 0 strVersionsstufen(2) = 0 strVersionsstufen(3) = 0 Case 2 strVersionsstufen(1) = strVersionsstufen(1) + 1 strVersionsstufen(2) = 0 strVersionsstufen(3) = 0 Case 3 strVersionsstufen(2) = strVersionsstufen(2) + 1 strVersionsstufen(3) = 0 Case 4 strVersionsstufen(3) = strVersionsstufen(3) + 1 End Select strVersion = Join(strVersionsstufen(), ".") NeueVersion = strVersion End Function
Die Funktion erwartet als Parameter die aktuelle Versionsnummer in der Form x.x.x.x. Sie fragt als Erstes mit einer Inputbox die Stelle ab, die erhöht werden soll. Die Inputbox erwartet einen Wert zwischen 1 und 4.
Die einzelnen Ebenen der Versionsnummer werden dann mit der Funktion Split in die Felder des Arrays intVersionsstufen geschrieben. Die folgende Select Case-Bedingung verzweigt entsprechend der zu ändernden Ebene der Versionsnummer.
Die zur jeweiligen Ebene gehörende Zahl wird um eins erhöht, die danach folgenden Ebenen auf 0 eingestellt. Die Join-Anweisung fügt die neuen Versionsstufen wieder zu einer vollständigen Versionsnummer zusammen.
Die Funktion finden Sie im Modul mdlVersionsnummern der Beispieldatenbank.
Versionsstände vergleichen
Wenn Sie mit Versionsständen arbeiten, möchten Sie vielleicht auch einmal zwei Versionsstände vergleichen.
Wenn man sich darauf einigt, zumindest für die hinteren drei Zahlen, also Hauptversionsnummer, Nebenversionsnummer, Revisionsnummer und Buildnummer (also etwa 1.0.3.8), nur einstellige Zahlen zu verwenden, könnte man einfach die Trennzeichen (wie den Punkt) weglassen und die resultierenden Zahlenwerte vergleichen.
In der Regel gibt es aber auch Versionsstände wie 2.1.13.1048, und dort greift diese Vorgehensweise nicht mehr.
Also benötigen wir eine etwas ausgefeiltere Funktion, um zu prüfen, ob ein Versionsstand neuer als ein anderer ist. Diese Prüfung erledigt die Funktion IstVersionAktueller aus Listing 2.
Listing 2: Prüfen, ob eine Versionsnummer aktueller als die andere ist
Public Function IstVersionAktueller(strVersionNeu As String, strVersionAlt As String) As Boolean Dim strVersionsstufenNeu() As String Dim strVersionsstufenAlt() As String Dim intNeu As Integer Dim intAlt As Integer Dim intVersionsebene As Integer If Not VersionsnummerGueltig(strVersionNeu) Then MsgBox "Die Versionsnummer ''" & strVersionNeu & "'' ist ungültig." Exit Function End If If Not VersionsnummerGueltig(strVersionAlt) Then MsgBox "Die Versionsnummer ''" & strVersionAlt & "'' ist ungültig." Exit Function End If strVersionsstufenNeu = Split(strVersionNeu, ".") strVersionsstufenAlt = Split(strVersionAlt, ".") For intVersionsebene = 0 To 3 intNeu = CInt(strVersionsstufenNeu(intVersionsebene)) intAlt = CInt(strVersionsstufenAlt(intVersionsebene)) Select Case intNeu Case Is > intAlt IstVersionAktueller = True Exit Function Case Is < intAlt Exit Function End Select Next intVersionsebene End Function
Die Funktion erwartet die Angabe zweier Versionsstände, wobei der erste der aktuellere sein soll. Kann die Funktion dies bestätigen, liefert sie den Wert True zurück, sonst False.
Für die Prüfung werden die beiden Versionsstände zunächst mit der Funktion VersionsnummerGueltig auf ihr Format geprüft (siehe weiter unten).
Die Versionsnummern sollten aus vier durch Punkte getrennten Elementen bestehen (x.x.x.x).
Haben die beiden Versionsnummern das erwartete Format, werden die einzelnen Elemente beider Versionsnummern in die Arrays strVersionsstufenNeu() und strVersionsstufenAlt() aufgeteilt. Die Funktion vergleicht dann vom jeweils ersten Element ausgehend alle Elemente.
Dazu konvertiert sie den neuen und den alten Wert zunächst in die beiden Variablen intNeu und intAlt.
Eine Select Case-Bedingung prüft dann zwei Fälle:
- Ist intNeu größer als intAlt Dann ist die als neue Version angegebene Versionsnummer tatsächlich die aktuellere.
- Ist intNeu kleiner als intAlt Dann ist die als ältere Version angegebene Versionsnummer die aktuellere.
In beiden Fällen wird die Funktion beendet, einmal mit dem Rückgabewert True und einmal mit False. Sind beide Versionsnummern gleich, werden die Werte der jeweils nächsten Ebene der Versionsnummern verglichen.
Sollte bis zum letzten Element keine Entscheidung gefallen sein, sind beide Versionsnummern gleich – das bedeutet, dass die Funktion ebenfalls den Wert False zurückgeben muss.
Die Funktion finden Sie ebenfalls im Modul mdlVersionsnummern der Beispieldatenbank.
Versionsnummern prüfen
Wenn Sie Versionsnummern vergleichen möchten, sollten Sie zuvor prüfen, ob diese auch gültig sind.
Dies erledigt die Funktion VersionsnummerGueltig aus Listing 3. Beim Entwickeln dieser Funktion haben wir eine Reihe von Testfällen zuhilfe genommen, die wie folgt in einer VBA-Prozedur landeten:
Listing 3: Versionsnummer auf Gültigkeit prüfen
Public Function VersionsnummerGueltig(strVersion As String) Dim strVersionsstufen() As String Dim strNumerisch As String Dim intVersionsstufe As Integer Dim i As Integer strVersionsstufen = Split(strVersion, ".") If Not (UBound(strVersionsstufen) - LBound(strVersionsstufen) = 3) Then Exit Function End If For intVersionsstufe = LBound(strVersionsstufen) To UBound(strVersionsstufen) strNumerisch = Replace(strVersionsstufen(intVersionsstufe), ".", "") If Len(strNumerisch) = 0 Then Exit Function End If For i = 1 To Len(strNumerisch) If Not IsNumeric(Mid(strNumerisch, i, 1)) Then Exit Function End If Next i Next intVersionsstufe VersionsnummerGueltig = True End Function Public Sub Test_VersionsnummerGueltig() Debug.Print "Test 1:", VersionsnummerGueltig("1") = False ... End Sub