【问题标题】:Range.Validation method occure 1004 errorRange.Validation 方法发生 1004 错误
【发布时间】:2015-09-03 07:24:24
【问题描述】:

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

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

-放置值后重新计算书

-我调试所有代码,其中没有错误(错误仅出现在此代码中)

这是代码。

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 来避免错误处理程序崩溃,因为它将处理您遇到的第一个错误,直到遇到Resume 语句。一秒钟内查看答案。

标签: vba excel validation error-handling


【解决方案1】:

这个Resume 应该足以避免您的问题(如 cmets 中所述):

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“触发”前一个语句,所以它是无用的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多