我使用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”运行代码时,它不起作用,但是当我调试代码时,它有效吗?
非常感谢您的回答。 我的英文不是很好。抱歉有错误。
答案 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