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

Error in Hash Implementation in VBA - Runtime Error -2146232576 (80131700)

我已经按照 post:

上的建议实现了散列方法

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")

错误:

Runtime Error -2146232576 (80131700)

我检查了错误消息并提供了以下详细信息:

err.Source - VBAProject
err.HelpContext - 1000440
err.HelpFile - C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA7.146\VbLR6.chm
err.LastDllError - 0

有人遇到同样的问题吗?或者可以帮忙吗?看起来我缺少参考或其他东西......但我声明为对象并且它在其他 PC 上工作正常......帮助! =(

非常感谢!

在 MSDN (Excel 2010 VB Run-time Error '-2146232576 (80131700)' Automation Error on CreateObject("System.Collections.ArrayList") ???) 中的 post 上讨论了相同的错误编号并解决了问题。

安装 Microsoft .NET Framework 2.0 SP2(自动安装 3.5)解决了这个问题。

错误

Runtime Error -2146232576 (80131700)

on CreateObject 在 VBA 宏中可能是由于缺少 .NET2 框架,正如 ZygD 所建议的那样。 我正在回答介绍一种方法来检查是否是这个问题。

您应该按照以下步骤操作:

  1. 打开Windows => 运行(或点击Windows + R
  2. 类型"CMD"
  3. 运行
  4. 粘贴以下注册查询以检查您的 PC 上安装的 Framework .NET 的版本:reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"

你会得到类似

的东西

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\CDF HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0

指令 CreateObject 需要 .NET2 版本,这意味着即使您拥有 v4.0,您还需要 NET Framework v3.5。 您可以按照this tutorial进行安装。

现在,如果您按照上面列出的相同步骤操作,您应该得到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\CDF HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0

此时,如果您打开 Microsoft Excel 并点击 Alt + F11 和 运行这个宏应该可以工作。