You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部分机器执行VBA哈希函数时出现Automation Error问题求助

解决VBA中CreateObject("System.Text.UTF8Encoding")触发的Automation Error

错误原因

错误代码-2146232576 (80131700)本质是.NET框架组件加载失败,通常是目标机器的.NET框架注册异常、损坏,或者权限不足导致无法访问相关.NET类库。

解决方案

方案1:修复.NET框架注册或完整性

  • 打开命令提示符(管理员),根据机器安装的.NET版本运行注册命令,以.NET 4.0为例:
    regasm.exe "C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.dll"
    
    若为64位系统,可尝试Framework64路径:
    regasm.exe "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.dll"
    
  • 若注册无效,通过控制面板→程序和功能找到对应的.NET框架版本,选择“更改→修复”来修复框架完整性。

方案2:替换为VBA原生UTF-8转换(彻底避免.NET依赖)

修改原代码,用ADODB.Stream实现字符串转UTF-8字节数组,不再依赖.NET组件,兼容性更强:

Public Function BASE64SHA1(ByVal sTextToHash As String)

    Dim enc As Object
    Dim TextToHash() As Byte
    Dim SharedSecretKey() As Byte
    Dim bytes() As Byte
    Const cutoff As Integer = 28

    ' 使用ADODB.Stream替代System.Text.UTF8Encoding
    TextToHash = StringToUtf8Bytes(sTextToHash)
    SharedSecretKey = TextToHash

    Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")
    enc.Key = SharedSecretKey

    bytes = enc.ComputeHash_2((TextToHash))
    BASE64SHA1 = EncodeBase64(bytes)
    BASE64SHA1 = Left(BASE64SHA1, cutoff)

    Set enc = Nothing

End Function

' 字符串转UTF-8字节数组的辅助函数
Private Function StringToUtf8Bytes(ByVal str As String) As Byte()
    Dim stream As Object
    Set stream = CreateObject("ADODB.Stream")
    stream.Charset = "UTF-8"
    stream.Open
    stream.WriteText str
    stream.Position = 0
    stream.Type = 1 ' 切换为二进制模式
    StringToUtf8Bytes = stream.Read
    stream.Close
    Set stream = 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

方案3:验证权限与.NET版本一致性

  • 右键Excel图标选择以管理员身份运行,测试是否因权限不足导致组件加载失败;
  • 确认目标机器的.NET框架版本与其他正常机器完全一致,若版本过低,升级至匹配版本。

内容的提问来源于stack exchange,提问作者atomicskr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:44:51