VBA Excel Break Points和Stop不起作用

时间:2015-08-27 16:29:53

标签: excel vba excel-vba

知道为什么插入断点并停止不再阻止我的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

13 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

到第二个&#39; Tibo的评论:我遇到了一个问题,我有一个包含大约5个不同子程序的表单。当我设置断点时,其中一个(附加到按钮事件)不会停止。在VBA写作的10年里,我从来没有见过这种情况。有趣的是,断点在该形式的所有其他子例程上工作。经过多次头疼和搜索,我发现了这篇帖子和蒂博的评论。我添加了一个&#34; Stop&#34;命令到受影响的子程序,运行程序(它应该停止),然后断点再次开始工作!希望这可以帮助将来的某个人。

答案 2 :(得分:1)

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

a)代码永远不会到达断点。 看起来很不可能看到你在代码的第一行打破了。也许单步执行子(F8)只是为了检查它是否正常运行。

b)您的断点已被擦除。任何带断点的行都应在IDE上以红色突出显示。您可以轻松删除断点,例如关闭并打开工作簿(截图非常有用)。

c)您的工作簿在某种程度上被破坏了。它不太可能打破像停在断点处并且仍能正常运作的基本要素。你确定你的代码实际上在运行吗?

答案 3 :(得分:1)

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

答案 4 :(得分:0)

只是分享一个有趣的事情发生在我身上以防万一。我犯的错误是我只是将某人的方法代码用于工作簿打开事件并将其粘贴到Sheet1 excel对象代码区域。所以Workbook_Open方法不可能被解雇。

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

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

enter image description here

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

答案 5 :(得分:0)

a)仔细检查您的断点是否被禁用。

b)仔细检查您是否添加了条件断点

c)如果使用C#代码运行宏(使用_Run2命令),则断点和停止有时不起作用。

答案 6 :(得分:0)

我遇到了上述问题:

  • 停止点和断点不起作用
  • 单步F8有效,但代码未以黄色突出显示

关闭VBA编辑器没有帮助

我的补救方法:再次关闭VBA编辑器,保存Excel文件,打开编辑器,恢复正常

多年以来,我从未遇到过这个问题。今天,我第一次开始使用watch表达式,并在true时停止。

答案 7 :(得分:0)

我偶尔会遇到这种情况,以下每次都会为我解决问题: 创建一个仅包含命令Stop的Sub。运行。然后尝试您的例程,断点和停止命令现在应该可以正常工作。

答案 8 :(得分:0)

请确保没有与您正在调用的函数或子例程名称匹配的命名范围。这看起来像是Function或Subroutine失败了,但实际上在使用“无效单元格引用”调用该例程之前实际上是失败了。

答案 9 :(得分:0)

我也有这个问题。我的解决方案是在代码中放入错误并运行它。在清除错误后,断点再次开始工作。太奇怪了。

答案 10 :(得分:-1)

多年来我一直在VBA中编写代码,但是今天我第一次遇到了这个问题。我在网络上找到的所有解决方案都没有用,但是您可以使用以下方法代替Stop:

ErrCatch = 1/0

仍然无法解决断点仍然无法运行的问题...

答案 11 :(得分:-1)

我输入了我的vba代码,添加了一个enter(新的空白行),然后再次运行它。 瞧!它运行了代码,并在断点处停止了!

答案 12 :(得分:-1)

那不只是我!在某些情况下,黄色hi-lite会在断点后停几行!我猜代码正在运行得如此之快,无法及时停止。 :)如上所述,我发现到处都添加了“停靠点”,并且导出和重新导入也有帮助。