【问题标题】:VSTO - Excel - How to call range.Validation.Delete() without raising an error?VSTO - Excel - 如何调用 range.Validation.Delete() 而不引发错误?
【发布时间】:2018-08-20 14:08:29
【问题描述】:

当我在调用range.Validation.Delete() 之前按Alt + Down 键时,Excel 显示以下错误:

在 mscorlib.dll 中出现“System.Runtime.InteropServices.COMException”类型的异常,但未在用户代码中处理

附加信息:HRESULT 异常:0x800AC472

如果有这个异常的处理程序,程序可以安全地继续。

如何防止异步方法中出现此错误?

任何帮助将不胜感激。

【问题讨论】:

  • 能发一下调用range.Validation.Delete()的程序吗?
  • 如何设置range 的值?
  • 另外,您是否设置了断点并为变量添加了任何监视?
  • 嘿,@aduguid,不幸的是,它就像“range.Validation.Delete();”一样简单。唯一不同的是,在调用此过程之前,我按键盘上的 Alt + 向下箭头。如果我在调用它之前不按 Alt + Down,那么一切正常。我想我需要找到一种方法来知道是否按下了 Alt + Down 并显示了验证。无论如何,谢谢。
  • 例如,如果我调用“Globals.ThisAddIn.Application.SendKeys("{ESC}");”也会得到同样的错误。

标签: excel vb.net vsto


【解决方案1】:

我会使用TryCast 将变量转换为Excel.Range。然后检查它是否相等。以及捕获任何异常。

Public Sub MyProcedure()
    Dim range As Excel.Range = Nothing
    Try
        range = TryCast(Globals.ThisAddIn.Application.Selection, Excel.Range) 'must cast the selection as range or errors
        If range IsNot Nothing Then
            range.Validation.Delete()
        End If

    Catch
        'your error message here

    End Try

End Sub

【讨论】:

  • 不幸的是,即使我在调用“range.Validation.Delete();”之前按了 Alt + Down,范围对象也不会为 null(或 VB.NET 中的 Nothing)。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
相关资源
最近更新 更多