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个回答

0

请确保您没有命名范围与您调用的函数或子程序名称相匹配。否则,这将看起来像函数或子程序失败了,但实际上是在调用例程之前由于“无效单元格引用”而失败。


0

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

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

c) 如果您使用C#代码运行宏(使用_Run2命令),有时断点和停止功能无法正常工作。


0
我遇到了这个问题。断点和停止语句都被忽略了。在我的情况下,问题似乎是由放置在ThisWorkbookOpen_Workbook事件中的以下代码引起的:
With popupMenu.Controls.Add(Type:=msoControlButton, Temporary:=True)
    .OnAction = ThisWorkbook.Name & "!InsertTransactionRow(""Expense"")"
    .Caption = "Insert an expense row"
End With

With popupMenu.Controls.Add(Type:=msoControlButton, Temporary:=True)
    .OnAction = ThisWorkbook.Name & "!InsertTransactionRow(""Income"")"
    .Caption = "Insert an income row"
End With

调用过程内的断点和停止语句(即 InsertTransactionRow)被忽略,但毫无疑问代码正在运行。

我将 ThisWorkbook!Open_Workbook 进行了以下修改:

With popupMenu.Controls.Add(Type:=msoControlButton, Temporary:=True)
    .OnAction = ThisWorkbook.Name & "!InsertExpenseRow"
    .Caption = "Insert an expense row"
End With

With popupMenu.Controls.Add(Type:=msoControlButton, Temporary:=True)
    .OnAction = ThisWorkbook.Name & "!InsertIncomeRow"
    .Caption = "Insert an income row"
End With

现在,不再调用通用方法InsertTransactionRow,其中参数标识交易类型,而是调用特定于交易的方法InsertExpenseRowInsertIncomeRow,这两个方法都不需要参数。这个改变解决了我的问题。

-1

看来不只是我这样!有时黄色的高亮会在断点之后停止几行!我猜代码运行得太快了,没来得及停下来。 :) 如上所建议,我发现在这里添加“停止”以及导出和重新导入也有帮助。


这可能更适合作为评论而不是答案,因为您只是在同情OP并支持其他答案。 - shader
1
感谢Shader - 我还没有完全掌握这个论坛 - 以后我会记住的。 - Roger Barton

-2

我已经用VBA写代码多年了,但今天我第一次遇到这个问题。网络上找到的解决方案都没有起作用,但这里有一个简单的替代Stop的方法:

ErrCatch = 1 / 0

尽管如此,这还是无法解决断点不起作用的问题...


-2
我进入了我的VBA代码,添加了一个回车(新的空行),然后再次运行它。 哇!它运行了代码并停在了断点处!

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