VBA Excel断点和停止功能不起作用。

13
任何想法为什么插入断点和停止不再阻止我的VBA代码运行?
代码一直运行到最后(我测试过了),但忽略断点和停止。
同时,单步执行代码会使代码完全运行,忽略断点和停止。
当我关闭工作簿时,问题似乎起源于其他宏工作簿中也会出现相同的问题。
如果我完全关闭Excel并使用正常工作的宏工作簿重新打开它,则在重新打开有问题的工作簿之前不会出现此问题。
我在以下位置添加了断点:
TotP1 = 0
以下是代码的内容:
Option Explicit

Private Country As String
Private Measure As String
Private P1 As String
Private P2 As String
Private TotP1 As Double
Private TotP2 As Double


Sub VennDisplayIt()

Dim SI() As String
Dim SICount As Integer
Dim x As Integer
Dim OSh As Worksheet
Dim BrandListBox As Object
Dim VennGroup As Shape

TotP1 = 0
TotP2 = 0


Set OSh = ThisWorkbook.Sheets("Venn")

Set BrandListBox = OSh.OLEObjects("BrandListBox").Object

ReDim SI(2, 0)

For x = 0 To BrandListBox.ListCount - 1

    If BrandListBox.Selected(x) = True Then
        'If UBound(SI) < 4 Then
            ReDim Preserve SI(2, UBound(SI, 2) + 1)

            SI(1, UBound(SI, 2)) = BrandListBox.List(x)
            SI(2, UBound(SI, 2)) = x + 1
        'End If

    End If

Next x


If UBound(SI, 2) < 2 Then
    BrandListBox.Selected(BrandListBox.ListIndex) = True
    Exit Sub
ElseIf UBound(SI, 2) > 4 Then
    BrandListBox.Selected(BrandListBox.ListIndex) = False
    Exit Sub
End If

For x = 1 To UBound(SI, 2)
    OSh.Range("o8").Offset(x, 0).Value = SI(1, x)
    OSh.Range("o8").Offset(x + 5, 0).Value = SI(1, x)
Next x

For x = UBound(SI, 2) + 1 To 4
    OSh.Range("o8").Offset(x, 0).Value = ""
    OSh.Range("o8").Offset(x + 5, 0).Value = ""
Next x


SICount = UBound(SI, 2)

For x = 1 To OSh.Shapes.Count
    If Right(OSh.Shapes(x).Name, 5) = "Group" Then
    If LCase(OSh.Shapes(x).Name) = SICount & "waygroup" Then
        Set VennGroup = OSh.Shapes(x)
        OSh.Shapes(x).Visible = True
    Else
        OSh.Shapes(x).Visible = False
    End If
    End If

Next x

For x = 1 To SICount

    VennGroup.GroupItems.Item(SICount & "WayBrand" & x).DrawingObject.Text = SI(1, x)

Next x


Country = ThisWorkbook.Sheets("Venn").Range("D4").Value
Measure = ThisWorkbook.Sheets("Venn").Range("E32").Value
P2 = ThisWorkbook.Sheets("Venn").Range("E31").Value
P1 = ThisWorkbook.Sheets("Selections").Range("B5").Value


End Sub

2
你能展示一下代码以及断点放在哪里吗? - Scott Craner
1
我刚刚添加了代码。 - Oliver Humphreys
2
我在TotP1 = 0处设置了断点并运行了您的代码,它确实在那里中断了。因此,我的猜测是该工作簿确实存在某些损坏。 - Excel Hero
@ExcelHero 我认为你可能是对的。它最近崩溃了几次。我将尝试在新工作簿中重新创建它。我在两台不同的机器上遇到了相同的问题,所以似乎是文件而不是 Excel 设置的问题。 - Oliver Humphreys
16个回答

9

我从未听说过Stop失灵,但我听说并经历了断点的问题许多次。当您编译VBA时,它会创建一个p-code,由解释器使用。你有VBA语法层,可以看到,也有无法看到的p-code层。当断点停止工作时,是因为p-code被损坏了。我不知道它是如何或为什么会发生,但它确实发生了。

修复方法是导出、删除和重新导入所有模块。导出它们会创建一个.bas文件(实际上是纯文本)。当您重新导入时,p-code将从头开始重新生成。如果你有超过几个模块,可以获取CodeCleaner(免费插件),它会自动导出和重新导入。


1
我不仅从未遇到过代码中写的 Stop 无法工作的情况,而且每当我遇到断点无法中断执行和/或代码更新在执行时没有显示的频繁问题时,添加一个单独的 Stop 就可以立即解决。由于 @OliverHumphreys 的代码中实际上没有真正的 Stop,我想知道他是否真的在谈论 Stop 还是在考虑 F9 断点 / 条件断点。 - Tibo
“Stop”是一个命令,用于在该位置中断代码而不是创建断点。 - Wasiqul Islam

4
如果其中一个设置未被选中,则断点将无法工作。应该勾选“文件/选项/当前数据库/应用程序选项/使用访问特殊键”。

4

仅作为对Tibo评论的“赞同”:我曾经遇到这样的问题,我的表单包含大约5个不同的子程序。其中一个(附加到按钮事件)在我设置断点后无法停止。在10年的VBA编写中,我从未见过这种情况。有趣的是,在该表单中的所有其他子程序上都可以使用断点。经过长时间的思考和搜索,我找到了这篇帖子和Tibo的评论。我向受影响的子程序添加了一个“Stop”命令,运行该过程(它停止了应该停止的地方),然后断点重新开始工作!希望这能帮助未来的某些人。


1
关闭所有Excel窗口,然后再次打开我遇到问题的工作簿,这对我起到了作用。

1
如果断点在你的代码中,那么代码应该在到达该行时停止运行。可能导致问题的原因有:
a)代码从未到达断点。这似乎非常不可能,因为你正在第一行上设置断点。也许通过逐步执行子程序(F8)来检查它是否按照预期运行。
b)您的断点已被清除。任何带有断点的行都应在IDE中以红色高亮显示。您的断点可以很容易地被清除,例如关闭并重新打开工作簿(屏幕截图会非常有用)。
c)你的工作簿某种方式被损坏。很难想象会出现如此基本的问题而仍然正常运行。你确定你的代码实际上正在运行吗?

嗨,看起来是C语言。我无法逐步执行代码,因为这是问题的一部分。但是我的断点肯定已经放置并用红色突出显示了。代码肯定在运行,因为我在最后放置了一个测试来修改单元格,并且它起作用了。我刚刚将所有内容转移到了新工作簿中,目前似乎正常工作。 - Oliver Humphreys
好的,很高兴能帮到你 :) - Kaz

0
我在过去的一周左右遇到了这个问题 - 使用F9进行停止和断点,使用F8运行下面显示的代码 - 虽然还有很多其他代码。
这种情况经常发生,我只能退出Excel然后重新启动。
我的解决方法是...
关闭后台编译,然后调试>编译并消除所有错误。 但是后来我遇到了这个问题 - https://www.businessprogrammer.com/code-execution-has-been-interrupted/ 这是一个来自VBA的“代码执行已中断”消息,在VBA窗口中没有显示断点,只是停止执行。
请注意,我是在尝试使用F9等进行测试时发现的,所以可能与此无关。
这个问题可以通过关闭对话框,然后在VBA窗口中按下CTRL-Break来解决。
由于对我来说这个问题是间歇性的,我很想知道这是否可以解决其他人的问题。
Sub sleepy()
Dim i As Integer
For i = 1 To 10
    Application.Wait (Now + TimeValue("00:00:01"))
    Debug.Print Now
    DoEvents
    Stop
    Next
End Sub

0

我有如下描述的问题:

  • 停止和断点无效
  • F8单步调试有效,但代码未被突出显示

关闭VBA编辑器没有帮助

我的解决方法:再次关闭VBA编辑器,保存Excel文件,打开编辑器,问题解决

多年来我从未遇到过这个问题。今天是我第一次使用“真值停止”功能。


0
有时我也会遇到这个问题,以下方法每次都能解决它: 创建一个仅包含Stop命令的子程序。运行它。然后尝试你的例程,断点和停止命令现在应该可以正常工作了。

0

分享一件有趣的事情,希望能对某些人有所帮助。我的错误在于我简单地复制了别人为工作簿打开事件编写的方法代码,并将其粘贴到Sheet1 Excel对象代码区域。因此,Workbook_Open方法永远不可能被触发。

Private Sub Workbook_Open()
    Stop
    On Error Resume Next
    Call ActiveSheet.Worksheet_Activate
    On Error GoTo 0
End Sub

我应该做的是在项目窗格下双击Microsoft Excel Objects节点后,将此方法粘贴到ThisWorkbook节点之后,如下所示:

enter image description here

注意:复制粘贴他人代码的副作用有时可能会很奇怪。


0

我也遇到过这个问题。我的解决方法是在代码中放置一个错误并运行它。在清除错误后,断点又开始工作了。那真是奇怪。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接