我使用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”键运行代码时不起作用,但是当我调试代码时它起作用了?

非常感谢您的回答。
我的英文不是很好。对不起,错了。

最佳答案

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“抵消”先前的语句

关于vba - Range.Validation方法发生1004错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32369365/

10-11 22:12
查看更多