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 的调用导致了该问题,但是:

a) 我知道 BASE64SHA1 在从工作表调用时可以正常工作,并且

b)在我添加对 BASE64SHA1 的调用之前,ObfuscateEmail 工作正常

我究竟做错了什么?

答案1

这行代码:

objNode.nodeTypedValue = arrData

使用既不是暗淡'ed 也没有被分配值。

相关内容