Excel UDF внутри UDF выдает ошибку #VALUE

Excel UDF внутри UDF выдает ошибку #VALUE

Во-первых, спасибо nixda за код хеширования!

Я новичок в VBA. Я пытаюсь создать функцию, которая берет адрес электронной почты и скрывает часть имени пользователя, чтобы можно было распространить отчет, содержащий скрытый адрес электронной почты.

Я поместил следующее в модуль 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

И я могу прекрасно скрыть адрес электронной почты, если вызову функцию в рабочей книге:

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

Итак, если я передам эту функцию, я получу адрес электронной почты с хешированным именем пользователя. Отлично!

Но я хотел бы иметь возможность печатать:

=OBFUSCATEEMAIL(A1)

в рабочем листе

Итак, я открыл модуль VBA рабочего листа и на данный момент у меня есть:

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

Когда я пытаюсь вызвать эту новую функцию, я получаю ошибку #VALUE!

Вызов BASE64SHA1 вызывает проблему, но:

а) Я знаю, что BASE64SHA1 работает при вызове из рабочего листа, и

б) ObfuscateEmail работает нормально, пока я не добавлю вызов в BASE64SHA1

Что я делаю не так?

решение1

Эта строка кода:

objNode.nodeTypedValue = arrData

использует переменную, которая не является ниТусклый'ed и не было присвоено значение.

Связанный контент