VBA错误91:未设置对象变量或带块变量(Excel 2013)

VBA错误91:未设置对象变量或带块变量(Excel 2013),vba,excel,Vba,Excel,我们开始在工作中测试Excel 2013,我遇到了奇怪的行为,错误代码为91(Excel 2007中没有出现)。有两种不寻常的行为 每当我修改范围时,Err.Number设置为91,即使在最简单的宏中也是如此 宏仍将正常工作,不会抛出错误。例如 或者当我明确声明一个范围时 Sub Example2() Dim MyRange as Range Set MyRange = Range("A1") On Error Goto DisplayError With M

我们开始在工作中测试Excel 2013,我遇到了奇怪的行为,错误代码为91(Excel 2007中没有出现)。有两种不寻常的行为

  • 每当我修改范围时,
    Err.Number
    设置为91,即使在最简单的宏中也是如此
  • 宏仍将正常工作,不会抛出错误。例如
  • 或者当我明确声明一个范围时

    Sub Example2()
        Dim MyRange as Range
        Set MyRange = Range("A1")
    
        On Error Goto DisplayError
        With MyRange
            .Clear   'Sets Err.Number to 91
        End With
        Exit Sub
    
    DisplayError:
        Msgbox Err.Description   'Macro doesn't make it here
    End Sub
    
    在这两个示例中,宏将正常工作,单元格
    A1
    将被清除,且不会出现任何错误消息
    Err.Number
    将设置为91,而不调用
    DisplayError
    。完全相同的方法将在Office2007中工作,而不将
    Err.Number
    设置为91

    请注意,从某个范围读取数据不会改变
    错误编号
    ,例如

    MyString = Range("A1").Value
    
    工作正常,不会更改
    错误编号

    如果有人能解释这里发生了什么,那就太棒了

    编辑:下面是经过测试的精确代码

    Sub Example1()
       On Error Goto DisplayError
       MsgBox Err.Number   'Displays "0"
       Range("A1").Clear
       MsgBox Err.Number   'Displays "91"
       Exit Sub
    
    DisplayError:
       Msgbox Err.Description   'Macro doesn't make it here
    End Sub
    

    好的,看来禁用外接程序不足以阻止他们干预。我发现运行“excel/automation”会禁用任何导致问题的原因,并且错误不再发生。

    您确定在调用之前不是91吗?@paxdiablo:我绝对确定。我在一个更复杂的宏中多次检查并清除了错误,以确保行为与我上面提到的一样。然后我不知所措,因为这似乎打破了“错误恢复,手动检查错误”的范例。你得等一个更有知识的人,尽管我这么说很难受:-)不能在这里复制。也许你可以更详细地解释你在做什么。例如,为什么您认为错误号设置为91?您是如何检查的?有没有连接到(例如)工作表更改的事件处理程序?很高兴听到您解决了这个问题。我自己刚开始测试Excel 2013,希望没有问题。
    Sub Example1()
       On Error Goto DisplayError
       MsgBox Err.Number   'Displays "0"
       Range("A1").Clear
       MsgBox Err.Number   'Displays "91"
       Exit Sub
    
    DisplayError:
       Msgbox Err.Description   'Macro doesn't make it here
    End Sub