情况:
我使用单元格“D2”的内容命名工作表。我刚刚编辑了下面的代码,以捕获各种问题条目、发布消息并提供一个有效且显然需要替换的值。
代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim BadData As Boolean
If Intersect(Target, ThisWorkbook.Sheets(2).Range("D2")) Is Nothing Then
Exit Sub
End If
BadData = False
If Len(Target.Value) > 31 Or IsEmpty(Target.Value) Then
BadData = True
ElseIf InStr(Target.Value, "[") <> 0 Then
BadData = True
ElseIf InStr(Target.Value, "]") <> 0 Then
BadData = True
ElseIf InStr(Target.Value, "*") <> 0 Then
BadData = True
ElseIf InStr(Target.Value, "?") <> 0 Then
BadData = True
ElseIf InStr(Target.Value, "\") <> 0 Then
BadData = True
ElseIf InStr(Target.Value, "/") <> 0 Then
BadData = True
ElseIf InStr(Target.Value, ":") <> 0 Then
BadData = True
End If
If BadData Then
MsgBox "You have entered an unacceptable ID value." & vbCrLf & _
vbCrLf & _
"The Site No entry must:" & vbCrLf & _
vbCrLf & _
"1) Be a value less than 31 characters long" & vbCrLf & _
"2) Not contain the following characters: /, \, :, ?, *, [, ]" & vbCrLf & _
"3) Not be a blank value" & vbCrLf & _
"4) Be compatible with excel sheet name restrictions"
Target.Value = "Enter Site ID"
End If
ThisWorkbook.Sheets(2).Name = Target.Value
End Sub
虽然上面的代码似乎有效,但我确信还有多种其他方法可以实现相同的最终结果。多个 IF 语句导致相同的值让我有点困扰。
我最初想把所有单独的 InStr 检查与 Len 和 IS Empty 检查放在一个长的 OR 语句中,但最后决定不这样做,因为我觉得其他人来尝试并找出代码会很麻烦。我意识到如果检查结果为 TRUE,ELSEIF 可能会有一些好处,可以防止进行后续检查。
问题
我想知道是否有更好的方法来做到这一点?