Excel UDF dentro de UDF dando erro #VALUE

1

Primeiramente, obrigado a nixda pelo código hash!

Eu sou meio novo no VBA. Eu estou tentando criar uma função que leva um endereço de e-mail e ofusca a parte de nome de usuário para que um relatório contendo o endereço de e-mail ofuscado possa ser distribuído.

Eu coloquei o seguinte em um 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

E eu posso ofuscar um endereço de e-mail se eu chamar a função na pasta de trabalho:

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

Então, se eu passar essa função, recebo um endereço de e-mail com um nome de usuário com hash. Ótimo!

Mas eu gostaria de poder digitar:

=OBFUSCATEEMAIL(A1)

na planilha

Então eu abri o módulo VBA da planilha e até agora eu tenho:

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

Quando tento chamar essa nova função, recebo um erro de #VALUE!

A chamada para BASE64SHA1 está causando o problema, mas:

a) Eu sei que BASE64SHA1 está trabalhando quando chamado da planilha, e

b) Eu ObfuscateEmail funciona bem até eu adicionar a chamada para BASE64SHA1

O que estou fazendo de errado?

    
por David Vernon 12.10.2015 / 16:45

1 resposta

0

Esta linha de código:

objNode.nodeTypedValue = arrData

usa uma variável que não é Dim 'ed nem foi atribuída um valor.

    
por 12.10.2015 / 17:34