Excel-UDF innerhalb von UDF gibt #VALUE-Fehler aus

Excel-UDF innerhalb von UDF gibt #VALUE-Fehler aus

Zunächst einmal vielen Dank an nixda für den Hashing-Code!

Ich bin ziemlich neu bei VBA. Ich versuche, eine Funktion zu erstellen, die eine E-Mail-Adresse annimmt und den Benutzernamenteil verschleiert, sodass ein Bericht mit der verschleierten E-Mail-Adresse verteilt werden kann.

Ich habe folgendes in ein VBA-Modul eingefügt:

Private Function EncodeBase64(ByVal sTextToHash As String)

Dim objXML As Object
Dim objNode As Object

Set objXML = CreateObject("MSXML2.DOMDocument")
Set objNode = objXML.createElement("b64")

objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.Text

Set objNode = Nothing
Set objXML = Nothing

End Function

Public Function BASE64SHA1(ByVal sTextToHash As String)

Dim asc As Object
Dim enc As Object
Dim TextToHash() As Byte
Dim SharedSecretKey() As Byte
Dim bytes() As Byte
Const cutoff As Integer = 5

Set asc = CreateObject("System.Text.UTF8Encoding")
Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")

TextToHash = asc.GetBytes_4(sTextToHash)
SharedSecretKey = asc.GetBytes_4(sTextToHash)
enc.Key = SharedSecretKey

bytes = enc.ComputeHash_2((TextToHash))
BASE64SHA1 = EncodeBase64(bytes)
BASE64SHA1 = Left(BASE64SHA1, cutoff)

Set asc = Nothing
Set enc = Nothing

End Function

Und ich kann eine E-Mail-Adresse problemlos verschleiern, wenn ich die Funktion in der Arbeitsmappe aufrufe:

=BASE64SHA1(LEFT(A1,FIND("@",A1)-1))&"@"&MID(A1,FIND("@",A1)+1,999)

Wenn ich also diese Funktion übergebe, erhalte ich eine E-Mail-Adresse mit einem gehashten Benutzernamen. Großartig!

Aber ich möchte Folgendes eingeben können:

=OBFUSCATEEMAIL(A1)

im Arbeitsblatt

Also habe ich das VBA-Modul des Arbeitsblatts geöffnet und bisher habe ich:

Public Function ObfuscateEmail(ByVal email As String)

    Dim username As String
    Dim domain As String

    username = Left(email, InStr(email, "@") - 1)
    domain = Right(email, Len(email) - InStr(email, "@"))

    ObfuscateEmail = BASE64SHA1(username) & "@" & domain

End Function

Wenn ich versuche, diese neue Funktion aufzurufen, erhalte ich einen #VALUE-Fehler!

Der Aufruf von BASE64SHA1 verursacht das Problem, aber:

a) Ich weiß, dass BASE64SHA1 funktioniert, wenn es vom Arbeitsblatt aufgerufen wird, und

b) Ich ObfuscateEmail funktioniert einwandfrei, bis ich den Aufruf zu BASE64SHA1 hinzufüge

Was mache ich falsch?

Antwort1

Diese Codezeile:

objNode.nodeTypedValue = arrData

verwendet eine Variable, die wederDunkelnoch wurde ihm ein Wert zugewiesen.

verwandte Informationen