【问题标题】:Error in Hash Implementation in VBA - Runtime Error -2146232576 (80131700)VBA 中的哈希实现错误 - 运行时错误 -2146232576 (80131700)
【发布时间】:2015-03-11 13:38:24
【问题描述】:

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

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

有人遇到同样的问题吗?或者可以帮助吗?看起来我缺少参考或其他东西......但我声明为 Object 并且它在其他 PC 中运行良好......帮助! =(

非常感谢!

【问题讨论】:

  • 如果没有看到您的代码,我们将无法帮助您。
  • 嗨 RubberDuck,它与链接中的内容大致相同,但我会在实施时发布它。谢谢!
  • 抛出错误时调试器会高亮显示哪一行?
  • 嗨 Degustaf,在声明 BASE64SHA1 函数后第一行的错误亮点 >>> 设置 asc = CreateObject("System.Text.UTF8Encoding")。感谢您查看此内容。
  • @JohnGreen 听起来该用户的 dll 丢失/损坏。根据 MSDN,该类应该是 mscorlib.dll 的一部分

标签: excel excel-2013 vba


【解决方案1】:

错误

运行时错误 -2146232576 (80131700)

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

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

  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 并运行宏,这应该可以工作。

【讨论】:

    【解决方案2】:

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

    通过安装 Microsoft .NET Framework 2.0 SP2(它也自动安装了 3.5)解决了该问题。

    【讨论】:

      猜你喜欢
      • 2016-08-01
      • 2022-12-11
      • 2012-04-15
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      相关资源
      最近更新 更多