#VALUE 오류가 발생하는 UDF 내의 Excel UDF

#VALUE 오류가 발생하는 UDF 내의 Excel UDF

먼저 해싱 코드를 제공해 주신 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도 아니고 값이 할당되지도 않았습니다.

관련 정보