VBA Excel断点和停止不起作用

任何想法,为什么插入断点和停止不再阻止我的VBA代码运行?

代码运行一直到最后(我testing它),但忽略断点和停止。

同样也是让代码完整运行,忽略中断点和停止。

当我closures工作簿时,问题似乎源于其他macros工作簿中出现的相同问题。

如果我完全closuresexcel,并重新打开一个正常工作的macros工作簿,问题不会发生,直到我重新打开问题工作簿。

我在下面添加了断点:

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 

我从来没有听说过Stop不工作,但我已经听说过很多次,经历过这个断点。 编译VBA时,会创build一个由解释器使用的p代码。 您可以看到您可以看到的VBA语法层以及您无法看到的P代码层。 当断点停止工作时,这是因为p代码已损坏。 我不知道这是怎么发生的,但是它确实发生了。

解决的办法是导出,删除和重新导入所有的模块。 导出它们会创build一个.bas文件(纯文本,真的)。 重新导入时,将从头开始重新生成p代码。 如果您有多个模块,请获取CodeCleaner(免费加载项),并自动导出并重新导入。

如果断点位于您的代码中,那么代码将在它碰到该行时立即停止运行。 您的问题的可能原因:

a)代码永远不会到达断点。 在代码的第一行中,似乎不太可能看到。 也许单步通过子(F8)只是为了检查它正在运行,因为它应该。

b)你的断点已被抹去。 任何带有断点的行都应该在IDE上以红色突出显示。 你的断点很容易被擦除,例如closures和打开工作簿(一个截图将会非常有用)。

c)你的工作簿在某种程度上被打破了。 不可能像断点那样突破一些根本性的东西,仍然能够正常运作。 你确定你的代码实际上在运行吗?

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

只是“第二”Tibo的评论:我有一个问题,我有一个约5个不同的子程序的forms。 其中一个(附加到button事件)不会停止时,我设置了一个断点。 在10年的VBA写作中,我从来没有见过这样的事情发生。 有趣的是,断点在这种forms下的所有其他子程序中都有效。 经过多次的搔抓和寻找之后,我发现了这个post和Tibo的评论。 我向受影响的子程序添加了“停止”命令,运行程序(它应该停止),然后断点再次开始工作! 希望这有助于未来的人。