Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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

Anzeige

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

Anzeige
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^^)

Anzeige
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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

GUIDs in Excel erstellen: Eine Schritt-für-Schritt-Anleitung


Schritt-für-Schritt-Anleitung

Um in Excel eine GUID (Globally Unique Identifier) zu erzeugen, kannst Du die folgende VBA-Funktion verwenden. Befolge diese Schritte, um die Funktion in Deinem Excel-Dokument zu erstellen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke im Menü auf Einfügen und dann auf Modul.
  3. Kopiere und füge den folgenden Code ein:

    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 - k, "0") & Hex(n)
    End Function
  4. Schließe den VBA-Editor:

    • Klicke auf das X oder wähle Datei > Schließen und zurück zu Microsoft Excel.
  5. Verwende die Funktion in einer Zelle:

    • Gib in einer Zelle =NewGUID() ein und drücke Enter. Du solltest jetzt eine neue GUID sehen.

Häufige Fehler und Lösungen

  • Fehler: "Komponente kann nicht gefunden werden":

    • Stelle sicher, dass Du die richtige Version von Excel verwendest und die Bibliothek "OLE32.DLL" in Deinem System vorhanden ist.
  • Fehler: GUID wird nicht generiert:

    • Überprüfe, ob der Code korrekt eingefügt wurde und keine Syntaxfehler vorliegen. Nutze die Debugging-Funktion (F8), um den Code Schritt für Schritt durchzugehen.

Alternative Methoden

Falls Du eine einfachere Methode suchst, um GUIDs zu generieren, kannst Du auch Online-Tools oder spezialisierte Software verwenden, die eine UUID generieren. Auch einige Add-Ins für Excel bieten GUID-Generierungsfunktionen an.


Praktische Beispiele

Hier sind einige Beispiele, wie Du die Funktion NewGUID() verwenden kannst:

  1. Einfaches GUID in Zelle:

    • =NewGUID() gibt eine neue GUID zurück.
  2. GUID in einer Liste erstellen:

    • Du kannst eine ganze Spalte mit GUIDs füllen, indem Du die Funktion nach unten ziehst.

Tipps für Profis

  • Nutze die Funktion NewGUID() in Kombination mit anderen Excel-Funktionen, um eindeutige Identifikatoren für Datensätze zu erstellen.
  • Du kannst die GUIDs auch in einer Datenbank oder für API-Anfragen verwenden, um sicherzustellen, dass jeder Eintrag einzigartig ist.

FAQ: Häufige Fragen

1. Warum sind führende Nullen wichtig? Die führenden Nullen sind notwendig, um das spezifische Format einer GUID (8-4-4-4-12 Zeichen) zu gewährleisten.

2. Was ist der Unterschied zwischen GUID und UUID? GUID und UUID sind im Wesentlichen dasselbe; GUID ist ein Begriff, der häufig in Microsoft-Technologien verwendet wird, während UUID allgemeinere Anwendungen in der Programmierung hat.

3. Wie kann ich die GUID in Excel weiterverarbeiten? Du kannst die generierte GUID wie jeden anderen Text in Excel verwenden, z. B. für Datenbankeinträge, als eindeutige Schlüssel in Tabellen oder für die Identifikation von Datensätzen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige