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) ObfuscateEmailはBASE64SHA1の呼び出しを追加するまでは正常に動作します

何が間違っているのでしょうか?

答え1

このコード行:

objNode.nodeTypedValue = arrData

どちらでもない変数を使用する薄暗い'ed も値も割り当てられていません。

関連情報