UDF 中的 Excel UDF 給出 #VALUE 錯誤

UDF 中的 Excel 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 也沒有被賦值。

相關內容