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

VBA中Runtime Error 429:ActiveX组件无法创建对象问题排查

解决Access VBA AES解密时的Runtime Error 429及函数代码问题

首先,你遇到的Runtime Error 429(ActiveX组件无法创建对象),结合DecryptData函数里的代码问题来看,大概率是函数内的变量拼写错误导致创建ActiveX对象失败——毕竟EncryptData能正常运行,说明你的环境里相关加密类ActiveX组件是正常注册可用的。

下面是DecryptData函数里的所有问题及修复方案:

  • 变量拼写错误:把ObjText误写为ojbText,导致创建对象时引用了未定义的变量,直接触发429错误。修复:将所有ojbText改为ObjText。
  • 解密逻辑错误:错误调用了CreateEncryptor方法,解密必须用CreateDecryptor。修复:把CreateEncryptor替换为CreateDecryptor。
  • 未赋值就遍历变量:decryptedBytes在遍历前没有被赋值,会导致空引用错误。修复:在遍历前先通过解密流的Read方法给decryptedBytes赋值。
  • 返回值变量名错误:函数定义是DecryptData,但最后返回的是DecryptedData,变量名不匹配会导致编译或运行错误。修复:将返回语句里的DecryptedData改为DecryptData,或者统一变量命名。

修复后的DecryptData函数示例(基于常见的.NET加密组件COM互操作场景):

Function DecryptData(inputText As String, key As String, iv As String) As String
    Dim aes As Object
    Dim decryptor As Object
    Dim ms As Object
    Dim cs As Object
    Dim ObjText As Object ' 修正拼写错误
    Dim encryptedBytes() As Byte
    Dim decryptedBytes() As Byte
    Dim decryptResult As String ' 统一返回变量名
    
    Set aes = CreateObject("System.Security.Cryptography.AesManaged")
    aes.Key = StrConv(key, vbFromUnicode)
    aes.IV = StrConv(iv, vbFromUnicode)
    
    ' 替换为解密器
    Set decryptor = aes.CreateDecryptor()
    
    Set ObjText = CreateObject("System.Text.UTF8Encoding")
    encryptedBytes = ObjText.GetBytes_4(inputText)
    
    Set ms = CreateObject("System.IO.MemoryStream")
    Set cs = CreateObject("System.Security.Cryptography.CryptoStream")
    Set cs = cs.Create(ms, decryptor, 1) ' 指定写入模式
    
    cs.Write encryptedBytes, 0, UBound(encryptedBytes) + 1
    cs.FlushFinalBlock
    
    ms.Position = 0
    ReDim decryptedBytes(ms.Length - 1)
    ' 给decryptedBytes赋值
    ms.Read decryptedBytes, 0, ms.Length
    
    decryptResult = ObjText.GetString(decryptedBytes)
    
    ' 返回正确的函数名对应变量
    DecryptData = decryptResult
    
    ' 释放对象
    Set cs = Nothing
    Set ms = Nothing
    Set decryptor = Nothing
    Set aes = Nothing
    Set ObjText = Nothing
End Function

另外,因为EncryptData能正常运行,说明你的Access环境已经正确注册了相关加密组件,无需额外排查组件注册问题,重点修复DecryptData里的代码错误即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:04:56