Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1260to1264
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dateiversion vergleichen

Dateiversion vergleichen
Rolandx
Hallo Zusammen,
habe mal wieder ein kleines Problem.
habe eine Exceldatei z.B. "Datei A 8.0.8.xlsm"mit diversen Modulen, die sich auch gegenseitig aufrufen.
Die Datei wird aus einer anderen Datei z.B. "Datei B 8.0.8.xlsx" erstellt.
Sollte zu der Datei "B" eine neue Version "Datei B 8.0.9.xlsx" vorhanden sein, dann erkennt Datei "A" dies und fraegt ob ich ein Update erstellen moechte und wenn ja dann tut Sie dies und gibt der neuen Datei "A" die Versionsnummer der Datei "B", also in diesem Fall "Datei A 8.0.9.xlsm".
Zum Versionsvergleich verwende ich nur die Versionsnummer, entferne die Punkte und wandle diesen String in Integer um. somit ist die neue Version "809" groesser als die alte Version "808"
Das ging auch einige Monate gut bis jetzt der Fall aufgetreten ist, dass die neue Version der Datei "B" eine Zehnerstelle enthaelt, also z.B. "Datei B 8.0.10.xlsx"
Somit ist die neue Version "8010" und somit groesser als die alte Version "809".
1. Problem
Wenn sich jetzt aber die Version in der ersten Stelle erhoeht, also von "8.0.10" auf "9.0.0" dann wird logischerweise keine neue Version erkannt weil "8010" groesser ist als "900". Ich habe keine Ahnung ie ich das loese die beiden Werte zu vergleichen.
Wenn ich das Makro aendere und die Punkte in der Version lasse funktioniert der Vergleich auch nicht, da 8.0.10 als kleiner erkannt wird als 8.0.2
Kann mir hierzu jemand weiterhelfen ?
Vielen Dank schon mal und viele Gruesse
Roland

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Dateiversion vergleichen
15.05.2012 11:46:21
Rolf
Hallo Roland,
die Lösung ist eigentlich recht simpel; du musst nur entsprechend der möglichen Varianten zwei statt einer Stelle vorsehen:
8.0.08 (bzw. 8008)
8.0.10 (bzw. 8010) =8.0.10>8.0.08 ergibt WAHR~f~
9.0.00 (bzw. 9000) ~f~=9.0.00>8.0.10 ergibt WAHR~f~
1.00.01 (bzw. 10001) ~f~=1.00.01>9.0.00 ergibt WAHR
Gruß, Rolf
AW: Dateiversion vergleichen
16.05.2012 12:24:04
Rolandx
Hallo Rolf,
vielen Dank fuer Deine schnelle Hilfe. Konnte mich gestern nicht mehr damit beschaeftigen.
Bei Deiner Anregeung muss ich immer erst die Stelle nach dem zweiten Punkt pruefen ( ob ein- oder zweistellig und wenn einstellig muss ich dann noch eine fuehrende Null voransetzen). Habe mir jetzt keine Gedanken gemacht wie ich das loese aber gestern Abend ist mir auch so eine Idee gekommen und die habe ich soeben umgesetzt .... und ....... funktioniert einwandfrei. Der Code besteht eigentlich nur aus vier Zeilen.
Ich habe ja die alte Version z.B. 8.0.9 und die neue Version z.B. 8.0.10
Diese bestehen theoretisch immer aus drei Stellen. Also
1.Stelle = 8
2. Stelle = 0
3. Stelle = 9 bzw. 10
nun habe ich die die erste Stelle als hunderter-Stelle, die zweite als zehner-Stelle und die dritte Stelle als einer-Stelle angenommen und dann jewils mit 100, 10 oder 1 multipliziert und die Ergebnisse dann addiert.
Der Code hierfuer sieht wie folgt aus:
ActVersion ist die aktuelle Versionsnummer also laut Beispiel die 8.0.9
NewVersion die gefundene Versionsnummer also laut Beispiel die 8.0.10
ActVer = Split(ActVersion, ".")
ActVersion = ActVer(0) * 100 + ActVer(1) * 10 + ActVer(2)
NwVer = Split(NewVersion, ".")
NewVersion = NwVer(0) * 100 + NwVer(1) * 10 + NwVer(2)
Somit kann ich die beiden Versionsnummern als Zahlenwerte weiterverarbeiten
If NewVersion > ActVersion Then
'new version is just guilty if higher then 0
If NwVer(2) = 0 Then
Application.EnableEvents = True
Exit Sub
End If
'if new version higher then 0 then new version is guilty
If NwVer(2) > 0 Then
usrUpdateYN.Show
u.s.w.
Also nochmals vielen Dank und sorry wenn ich jemanden unnoetig bemueht habe.
Viele Gruesse
Roland
Anzeige
AW: Dateiversion vergleichen
15.05.2012 12:16:54
fcs
Hallo Roland,
die nachfolgende Function füllt zum Vergleichen die Ziffernblöcke mit führenden Nullen auf.
Gruß
Franz
Sub Test()
Dim strVersionAlt As String
Dim strVersionNeu As String
strVersionAlt = "9.1.9"
strVersionNeu = "10.0.0"
If fncVersionsNr(strNummer:=strVersionNeu) > fncVersionsNr(strNummer:=strVersionAlt) Then
MsgBox "Version ist neu"
Else
MsgBox "Version ist alt/nicht neu"
End If
End Sub
Function fncVersionsNr(strNummer, Optional AnzahlZiffern = 3, _
Optional strTrenn As String = ".") As String
'wandelt Text der Form "8.0.10" um in "008.000.010"
'AnzahlZiffern = Anzahl Ziffern, die pro Block im Ergebnis ausgegeben werden sollen
'strTrenn = Trennzeichen zwischen den Ziffernblöcken
Dim varSplit, intI
varSplit = VBA.Split(strNummer, strTrenn)
For intI = LBound(varSplit) To UBound(varSplit)
If fncVersionsNr = "" Then
fncVersionsNr = Format(varSplit(intI), String(AnzahlZiffern, "0"))
Else
fncVersionsNr = fncVersionsNr & strTrenn & Format(varSplit(intI), String( _
AnzahlZiffern, "0"))
End If
Next
End Function

Anzeige
AW: Dateiversion vergleichen
16.05.2012 12:24:34
Rolandx
Hallo Franz,
vielen Dank fuer Deine schnelle Hilfe. Konnte mich gestern nicht mehr damit beschaeftigen.
Bin noch nicht ganz so fit in VBA und habe mit function noch nie gearbeitet und weiss somit auch nicht wie das funktioniert. Aber ich habe Deinen Code trotzdem verstanden.....zumindest die Funktionsweise.
Hatte allerdings gestern abend eine Idee die ich soeben umgesetzt habe und die ist um einiges einfacher.
Ich habe ja die alte Version z.B. 8.0.9 und die neue Version z.B. 8.0.10
Diese bestehen theoretisch immer aus drei Stellen. Also
1.Stelle = 8
2. Stelle = 0
3. Stelle = 9 bzw. 10
nun habe ich die die erste Stelle als hunderter-Stelle, die zweite als zehner-Stelle und die dritte Stelle als einer-Stelle angenommen und dann jewils mit 100, 10 oder 1 multipliziert und die Ergebnisse dann addiert.
Der Code besteht eigentlich nur aus vier Zeilen und sieht wie folgt aus:
ActVersion ist die aktuelle Versionsnummer also laut Beispiel die 8.0.9
NewVersion die gefundene Versionsnummer also laut Beispiel die 8.0.10
ActVer = Split(ActVersion, ".")
ActVersion = ActVer(0) * 100 + ActVer(1) * 10 + ActVer(2)
NwVer = Split(NewVersion, ".")
NewVersion = NwVer(0) * 100 + NwVer(1) * 10 + NwVer(2)
Somit kann ich die beiden Versionsnummern als Zahlenwerte weiterverarbeiten
If NewVersion > ActVersion Then
'new version is just guilty if higher then 0
If NwVer(2) = 0 Then
Application.EnableEvents = True
Exit Sub
End If
'if new version higher then 0 then new version is guilty
If NwVer(2) > 0 Then
usrUpdateYN.Show
u.s.w.
Also nochmals vielen Dank und sorry wenn ich jemanden unnoetig bemueht habe.
Viele Gruesse
Roland
Anzeige
AW: Dateiversion vergleichen
16.05.2012 15:15:28
fcs
Hallo Roland,
meine Funktion ist etwas allgemeiner anwendbar (Anzahl Trennzeichen in Versionsnummer ist Variabel)
Konsequenter Weise solltest du folgende Berechnung verwenden
ActVersion = ActVer(0) * 10000 + ActVer(1) * 100 + ActVer(2)

Version 8.1.0 =8*100+1*10+0 = 810
Version 8.0.10 =8*100 + 0*10 + 10=810
liefern nach deiner Berechnungsmethode die gleiche Versions Zahl.
Gruß
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige