Excel UDF dentro de UDF dando error #VALUE

Excel UDF dentro de UDF dando error #VALUE

En primer lugar, ¡gracias a nixda por el código hash!

Soy algo nuevo en VBA. Estoy intentando crear una función que tome una dirección de correo electrónico y oculte la parte del nombre de usuario para poder distribuir un informe que contenga la dirección de correo electrónico ofuscada.

Puse lo siguiente en un módulo VBA:

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

Y puedo ofuscar bien una dirección de correo electrónico si llamo a la función en el libro de trabajo:

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

Entonces, si paso esta función, obtengo una dirección de correo electrónico con un nombre de usuario con hash. ¡Excelente!

Pero me gustaría poder escribir:

=OBFUSCATEEMAIL(A1)

en la hoja de trabajo

Entonces abrí el módulo VBA de la hoja de trabajo y hasta ahora tengo:

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

Cuando intento llamar a esta nueva función, aparece un error #VALOR.

La llamada a BASE64SHA1 está provocando el problema, pero:

a) Sé que BASE64SHA1 funciona cuando se llama desde la hoja de trabajo, y

b) OfuscateEmail funciona bien hasta que agrego la llamada a BASE64SHA1

¿Qué estoy haciendo mal?

Respuesta1

Esta línea de código:

objNode.nodeTypedValue = arrData

utiliza una variable que no es niOscuro'ed ni se le ha asignado un valor.

información relacionada