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 所建议的那样。
我正在回答介绍一种方法来检查是否是这个问题。
您应该按照以下步骤操作:
- 打开Windows => 运行(或点击Windows + R)
- 类型"CMD"
- 推运行
- 粘贴以下注册查询以检查您的 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 和 运行这个宏应该可以工作。
我已经按照 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 所建议的那样。
我正在回答介绍一种方法来检查是否是这个问题。
您应该按照以下步骤操作:
- 打开Windows => 运行(或点击Windows + R)
- 类型"CMD"
- 推运行
- 粘贴以下注册查询以检查您的 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 和 运行这个宏应该可以工作。