VBA中的哈希实现出错 - 运行时错误-2146232576(80131700)

时间:2015-03-11 13:38:25

标签: excel excel-vba excel-2013 vba

我已按照帖子的建议实现了哈希方法:

Does VBA has a Hash_HMAC

这是我的实施:

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上工作得很好......帮助! =(

非常感谢!

2 个答案:

答案 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)

错误

  

运行时错误-2146232576(80131700)

正如ZygD所建议的那样,VBA宏中CreateObject上的

可能是由于缺少.NET2框架。 我正在回答介绍一种检查这是否是问题的方法。

您应遵循以下步骤:

  1. 打开Windows =>运行(或按 Windows + R
  2. 输入“ CMD”
  3. Run
  4. 粘贴以下注册查询以检查PC上安装的Framework .NET版本是什么: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 并运行宏,则应该可以。