我已按照帖子的建议实现了哈希方法:
这是我的实施:
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
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)
Set asc = Nothing
Set enc = Nothing
End Function
Private Function EncodeBase64(ByRef arrData() As Byte) 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
一切运行良好,在excel 2013
(葡萄牙语),Windows 8.1(葡萄牙语)和Windows 7下运行。
虽然,当我开始使用其他使用相同Excel 2013(葡萄牙语)但是Windows 8.1(英文版)的计算机时,不知道为什么以及是否这是原因,但是它提出了错误和调试器突出显示在BASE64SHA1函数的第一行,变量声明后:
Set asc = CreateObject("System.Text.UTF8Encoding")
错误:
运行时错误-2146232576(80131700)
我检查了错误消息并附带了以下详细信息:
err.Source - VBAProject
err.HelpContext - 1000440
err.HelpFile - C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ VBA \ VBA7.1 \ 1046 \ VbLR6.chm
err.LastDllError - 0
有没有人得到同样的问题?或者可以帮忙吗?看起来我错过了一个Reference或者其他东西......但是我宣称它是Object,它在其他PC上工作得很好......帮助! =(
非常感谢!
答案 0 :(得分:1)
在MSDN(Excel 2010 VB Run-time Error '-2146232576 (80131700)' Automation Error on CreateObject("System.Collections.ArrayList") ???)中的帖子中讨论了相同的错误号,并且解决了该问题。
那里的问题通过安装Microsoft .NET Framework 2.0 SP2(也自动安装了3.5)解决了。
答案 1 :(得分:1)
错误
正如ZygD所建议的那样,VBA宏中运行时错误-2146232576(80131700)
CreateObject
上的可能是由于缺少.NET2框架。 我正在回答介绍一种检查这是否是问题的方法。
您应遵循以下步骤:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"
您会得到类似的东西
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ CDF HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ v4 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ v4.0
istruction CreateObject需要一个.NET2版本,这意味着即使您具有v4.0,也将需要NET Framework v3.5。 您可以按照this tutorial进行安装。
现在,如果您按照上面列出的相同步骤操作,您应该会得到
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ CDF HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ v3.5 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ v4 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ v4.0
这时,如果您打开Microsoft Excel并按 Alt + F11 并运行宏,则应该可以。