Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel Can';此时不要进入中断模式_Excel_Vba_Debugging_Breakpoints_Worksheet - Fatal编程技术网

Excel Can';此时不要进入中断模式

Excel Can';此时不要进入中断模式,excel,vba,debugging,breakpoints,worksheet,Excel,Vba,Debugging,Breakpoints,Worksheet,当我在excel VBA中使用sheets.add或sheets.delete时,这种情况越来越多。经过一次又一次的搜索,我终于在上面找到了支持页面。我的问题是,有人知道为什么我可以一次又一次地使用这段代码,然后突然它开始做微软说它会一直做的事情,有没有办法修复它 Sub foo() Sheets.add debug.print "sheet added" 'breakpoint here End sub 就这么简单。您将无法重新创建它,因为我要问的问题是,它最初不会发生。

当我在excel VBA中使用sheets.add或sheets.delete时,这种情况越来越多。经过一次又一次的搜索,我终于在上面找到了支持页面。我的问题是,有人知道为什么我可以一次又一次地使用这段代码,然后突然它开始做微软说它会一直做的事情,有没有办法修复它

Sub foo()

    Sheets.add
    debug.print "sheet added" 'breakpoint here

End sub

就这么简单。您将无法重新创建它,因为我要问的问题是,它最初不会发生。它可以一次又一次地正常工作,然后随机显示Microsoft支持页面中描述的错误。

以下是一些并非傻瓜式的建议

首先,验证未设置断点时不会发生错误

如果没有,请尝试其他一些方法:

  • 从VBE调试菜单“编译VBA项目”,值得一试
  • 完全删除该行。运行代码。然后将该行放回并使用断点重试
  • 工作表之后添加
    DoEvents
    语句。添加
  • 使用
    MsgBox
    而不是
    Debug.Print上的断点。显示消息框后,尝试使用ctrl+fn+End手动断开。(在这一点上,“打破”是没有必要的,但看看你是否可以这样打破会很有趣)
  • 工作表上设置断点。改为添加
    ;实际上,如果只需将断点放在前一行,就没有理由将断点放在
    Print
    语句上
  • 有什么附加值吗?如果是这样,请禁用所有选项,然后一次重新启用一个选项,测试哪一个选项可能导致错误

  • 另一个Excel/VBA小故障

    当我单击运行宏的按钮时发生这种情况:

    • 我首先尝试从VBE直接运行宏
    • 如果失败,则在宏的第一条指令处设置断点
    • 如果仍然失败,我将尝试两种方法
    • 或者,在单击按钮并在第一个断点上断开后,我执行单个步骤(
      SHIFT F8
      ),然后我可以让调试像往常一样自由运行(
      F5
    到目前为止,我再也没有这个错误了


    可能也不是万无一失,但值得一试。

    检查项目中是否引用了MicrosoftVisual Basic for Applications Extensibility

    您可以在项目的Visual Basic窗口
    上的工具/参考菜单中进行检查

    引用Visual Basic for Applications Extensibility可防止程序暂停执行:

    Excel帮助具体说明:

    使用可扩展性(外接程序)对象模型以编程方式对项目进行了更改。这可以防止程序暂停执行您可以继续运行或结束执行,但不能暂停执行


    在对项目进行更改时,您无法单步执行代码(动态地,例如使用InsertLine等)。代码可以运行,但不能单步执行。

    删除某些对象(包括ActiveX对象)实际上会更改VB项目。我花了一些时间才意识到以下代码行阻止VBE进入中断模式:

    Excel.ActiveSheet.DrawingObjects.Delete
    

    如果您可以识别导致问题的代码,并且操作顺序并不重要,请将其移到脚本的末尾。

    首先:该链接并不表示“Microsoft说它将始终这样做”。它描述了某些条件,在这些条件下,无法进入中断模式是预期的行为。如果在您的情况下没有这些条件,那么您就有另一个问题。您要删除的工作表上是否有ActiveX控件?使用这个简单的例子,在完全关闭Excel并重新打开一个新的/空的工作簿后,是否可以重新创建错误?是的,在第一次发生错误后,从那时起就会发生。不,工作表上没有任何类型的代码或控件被删除。出于好奇,在没有设置断点的情况下是否会出现任何错误?您也可以从VBE调试菜单“编译VBA项目”中尝试。这有点像是在暗中拍摄,但您不妨尝试一下。例如,工作簿.VBProject.references.AddFromGuid无法单步通过。