【问题标题】:Run Time Error 5 when initializing a 2D array初始化二维数组时出现运行时错误 5
【发布时间】:2019-12-21 13:27:49
【问题描述】:

我一直在使用Arr=Array(Array(),Array()) 初始化一个二维数组。

但我发现会触发运行时错误 5 - 无效的过程调用或参数。

代码已使用多年,昨天出现问题,所以我认为这可能是 MS Office 或 Windows 的某些更新的结果。

更新:Windows 10、Windows 7 存在该错误,但 Windows Vista 不存在。

重现错误:

Sub foo()
  Dim Arr As Variant
  Arr = Array(Array(), Array())
End Sub

【问题讨论】:

  • 没有复制,但这似乎是一种非常奇怪的创建数组的方式。为什么不是Dim,然后是ReDim
  • 我认为这是一种方便灵活的方式来声明一个动态二维数组。也许这不是正确的方法。
  • @BigBen ReDim 适用于一维数组,但不适用于二维数组。我质疑在Recordset 上使用数组。
  • @MathieuGuindon 这是关于二维数组的一个很好的观点。但是是的......不确定OP到底想要做什么。

标签: arrays vba ms-access runtime-error


【解决方案1】:

这是由于在 Microsoft 于 2019 年 8 月 13 日推送的安全更新中发现的错误 (https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-1182)

查找与您的 Windows 版本相关的 KB 编号并键入(32/64 位)并卸载更新。这将解决问题。

Microsoft 正在研究修复更新中的错误。

更新

微软刚刚发布了一个补丁:https://support.microsoft.com/en-us/help/4517298/windows-8-1-update-kb4517298

【讨论】:

    【解决方案2】:

    有一个workaround 用于创建空数组。

    您可以使用SafeArrayCreateVector API-Function

    Private Declare Function EmptyVariantArr Lib "oleaut32" _
      Alias "SafeArrayCreateVector" (Optional ByVal VT As VbVarType = vbVariant, _
      Optional ByVal LB& = 0, Optional ByVal cElements& = 0) As Variant() 
    
    Dim A()
    A() = EmptyVariantArr 
    

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2013-09-12
      • 2021-12-28
      • 2014-06-23
      • 1970-01-01
      • 2011-04-18
      相关资源
      最近更新 更多