Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1424to1428
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

GUID Generator

GUID Generator
06.05.2015 12:57:34
Alex
Hallo zusammen,
ich habe eine Frage zur Erstellung von GUIDs. Habe auch was zusammengesucht und es funktioniert. Das Grundprinzip mit der API- Funktion ist mir klar aber die einzelnen Schritte nachzuvollziehen fällt mir schwer. Könnt ihr mir dabei helfen? Evt. die einzelnen Schritte zu kommentieren mit dem was sie tun?

Type GUID
data1 As Long
data2 As Integer
data3 As Integer
data4(7) As Byte
End Type
Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As Long
Public Function NewGUID() As String
Dim result As String
Dim uid As GUID
CoCreateGuid uid
result = hex0(uid.data1, 8) & "-" & _
hex0(uid.data2, 4) & "-" & _
hex0(uid.data3, 4) & "-" & _
hex0(uid.data4(0), 2) & hex0(uid.data4(1), 2) & "-"
Dim i As Integer
For i = 2 To 7
result = result & hex0(uid.data4(i), 2)
Next
NewGUID = result
End Function
Private Function hex0(n As Variant, digits As Integer) As String
Dim k As Integer
k = Len(Hex(n))
hex0 = String(digits - Len(Hex(n)), "0") & Hex(n)
End Function

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: GUID Generator
06.05.2015 16:11:05
Nepumuk
Hallo,
du bekommst in der Struktur eine 8Bit- zwei 4Bit und 8 2Bit-Zahlen zurück die werden in Hexadezimalzahlen umgewandelt, bedarfsweise wird von vorne mit Nullen aufgefüllt. Geht das doch einfach mit F8 durch und schau im Lokalfenster wie sich die Variablenwerte ändern.
Gruß
Nepumuk

AW: GUID Generator
06.05.2015 16:13:05
Michael
Hi Alex,
anstandshalber könntest du ja die Quelle mit angeben, von der Du den Schnipsel 1:1 übernommen hast:
http://dbwiki.net/wiki/VBA_Tipp:_GUID_-_Wie_erzeuge_ich_eindeutige_Schl%C3%BCssel
Ich denke, Dein Hauptproblem ist die Funktion hex0, weiter oben werden nur die von CoCreateGuid zurückgelieferten Variablen, die ganz oben unter type definiert wurden, zurückgeliefert und mit "-" zusammengestückelt. Dabei ist data4(7) ein array mit 8 Bytes (wird von 0 bis 7 gezählt), dessen erste zwei vor dem letzten "-" stehen, wie weiteren danach - die einzelnen "Felder" des Arrays werden dann in der For-Schleife ausgelesen.
Füg mal den Schnipsel mit ein und schau Dir die Ausgabe im "Direktfenster" (Strg+g) des VB-Editors an:

Sub test()
For i = 1 To 32
Debug.Print i * 10 & ": " & hex0(i * 10, 8)
Next
End Sub
string(Anzahl,Zeichen) erzeugt schlicht einen String mit der Anzahl des angegebenen Zeichens. hex erzeugt einen String (das kannst Du selbst in der Hilfe nachlesen) mit den hex-Werten einer Zahl.
hex0 wandelt also zunächst mit Len(Hex(n)) n in eine hex-String um und speichert dessen Länge in k.
Dann wird ein String mit führenden Nullen erzeugt, wobei sich die Anzahl aus der übergebenen Längenangabe digits und der errechneten Länge errechnet.
Das war's auch schon.
Happy Exceling,
Michael
P.S.: die Originalfunktion des Autors lautet übrigens so:

Private Function hex0(n, digits As Integer) As String
hex0 = Hex(n)
hex0 = String(digits - Len(hex0), "0") & hex0
End Function
und ist gegenüber dem, was Du geändert hast, deutlich optimierter. Wenn man schon ein k für die Länge des Strings einführt, sollte man es auch verwenden, und zwar in *Deiner* Zeile so:
hex0 = String(digits - k), "0") & Hex(n)
In Deinem Schnipsel wird *dreimal* die Funktion hex(n) aufgerufen, und bei sehr vielen Daten kostet das unnütz Zeit.
Im Original konvertiert der Autor nur *einmal* in die Variable hex0 und verwendet sie dann noch zweimal weiter.

Anzeige
AW: GUID Generator
06.05.2015 18:36:44
Alex
danke schonmal euch beiden.macht es schon etwas klarer.jedoch noch zwei direktere fragen:
1.wofür die führenden nullen?
2.der aufruf "cocreateuid uid" gibt ja eine uuid zurück korrekt?
wie kommt das dass "uid.data1" weiß welchen teil der zurückegebenen uuid es bekommt?
also der cocreatuid aufruf und die type deklsration ist eig das problem für mich.
und ja.nächstes mal nenne ich die quelle (hab ja zumindest erwähnt dass ich es zusammen gesucht hab^^)

AW: GUID Generator
06.05.2015 18:53:19
Nepumuk
Hallo,
1. Weil eine GUID ein genau vorgegebenes Format haben muss (8-4-4-4-12 Zeichen).
2. Das ist in der Funktion der du die Struktur übergibst so festgelegt.
Gruß
Nepumuk
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige