使用循环和用户输入进行错误处理

时间:2015-10-22 18:56:28

标签: excel vba error-handling

For i = 1 To repNumber
    TryAgain:
    On Error GoTo ErrH:

    repName = InputBox("Enter rep name you want to exclude.", "Name of Rep")
    .PivotItems(repName).Visible = False
Next i

ErrH:
        MsgBox "Try Again"
        GoTo TryAgain:

如果我输入数据透视表中不存在的Rep名称,则会显示错误。因此,我尝试使用错误处理程序让用户再次键入Rep名称。 但是在我第二次输入错误之后,代码却没有进入错误处理程序,代码终止了。

我不确定是否会出现“错误转发”问题。是错误的。

2 个答案:

答案 0 :(得分:1)

您可以通过在代码本身内进行测试并使用Error Handing块和GoTo循环来完全避免IfDo语句(这绝对是最佳做法) 。al。)。

请参阅此代码,该代码应完成同样的事情:

Dim pf As PivotField, pi As PivotItem
Set pf = PivotTables(1).PivotField("myField") 'adjust to your needs

For i = 1 To repNumber

    Do

        Dim bFound As Boolean
        bFound = False

        repName = InputBox("Enter rep name you want to exclude.", "Name of Rep")

        For Each pi In pf.PivotItems

            If pi.Value = repName Then
                pi.Visible = False
                bFound = True
                Exit For
            End If

        Next pi

    Loop Until bFound = True

Next i

答案 1 :(得分:0)

尝试使用Resume TryAgain代替GoTo TryAgain

(在这些语句中你不需要:,这是巧合的,因为它也用于分隔一行中的多个语句,所以这里没有意义。)