Range.Validation方法出现1004错误

时间:2015-09-03 07:24:25

标签: excel vba excel-vba validation error-handling

我使用VBA将验证添加到依赖于其他单元格的单元格,这是另一种验证。所有这些验证中的公式都有命名范围。 我尝试了什么:

- 在此验证所依赖的单元格中放置值;

- 在放置值后计算书籍

-i调试所有代码并且没有错误(仅在此代码中出现错误)

以下是代码。

Public Sub MakeValidation(ByVal ValidString As String, ByVal ValidAddress As String, ByVal ValidSheet As String, ByRef WB As Workbook)
    Dim n As Long
NewStart:
    Err.Clear
    n = n + 1
    If n = 10 Then Exit Sub
    On Error GoTo NewStart
    WB.Worksheets(ValidSheet).Range(ValidAddress).Validation.Delete
    Debug.Print "'" & Err.Number; "'" & "  " & Err.Description
    On Error GoTo NewStart
    If CheckValidation(ValidAddress, ValidSheet, WB) = True Then
        WB.Worksheets(ValidSheet).Range(ValidAddress).Validation.Delete
    End If
    WB.Worksheets(ValidSheet).Range(ValidAddress).Validation.Add Type:=xlValidateList, _
                                                                 AlertStyle:=xlValidAlertStop, _
                                                                 Operator:=xlBetween, _
                                                                 Formula1:=ValidString

End Sub

你有任何想法为什么“On error goto NewStart”不起作用? 为什么当我通过按“F5”运行代码时,它不起作用,但是当我调试代码时,它有效吗?

非常感谢您的回答。 我的英文不是很好。抱歉有错误。

1 个答案:

答案 0 :(得分:0)

Resume应足以避免您的问题(如评论中所述):

Public Sub MakeValidation(ByVal ValidString As String, ByVal ValidAddress As String, ByVal ValidSheet As String, ByRef WB As Workbook)
    Dim n As Long
NewStart:
    Err.Clear
    n = n + 1
    If n = 10 Then Exit Sub
    Resume KeepRunning
KeepRunning:

    On Error GoTo NewStart

    WB.Worksheets(ValidSheet).Range(ValidAddress).Validation.Delete
    Debug.Print "'" & Err.Number; "'" & "  " & Err.Description
    If CheckValidation(ValidAddress, ValidSheet, WB) = True Then
        WB.Worksheets(ValidSheet).Range(ValidAddress).Validation.Delete
    End If
    WB.Worksheets(ValidSheet).Range(ValidAddress).Validation.Add Type:=xlValidateList, _
                                                                 AlertStyle:=xlValidAlertStop, _
                                                                 Operator:=xlBetween, _
                                                                 Formula1:=ValidString
End Sub

我也摆脱了第二个On Error GoTo NewStart,这是没用的,因为你没有"出发"以前使用On Error GoTo 0

的声明