我使用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/