Excel输入特定邮编弹窗报错:Block If without End If
解决VBA多邮编提示的编译错误及实现方案
错误原因
你的多邮编宏代码出现“Block If without End If”错误,是因为代码嵌套结构不完整:第一个内层判断If Target = "xxx xxx"后未用End If闭合,就直接开始下一个外层If Not Intersect判断,导致VBA无法识别代码块的边界。
修复后的代码方案
以下两种方案都能实现“输入特定邮编弹出对应提示”的需求,结构清晰且无编译错误:
方案1:多独立If判断(适合少量邮编)
Private Sub Worksheet_Change(ByVal Target As Range) ' 避免多单元格批量修改时报错 If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:Z99")) Is Nothing Then If Target.Value = "xxx xxx" Then MsgBox "HI-AB DELIVERY REQUIRED." End If If Target.Value = "axx xx" Then MsgBox "NO DELIVERIES BEFORE 8AM." End If ' 如需添加更多邮编,直接复制上述If块修改即可 ' If Target.Value = "yyyy yy" Then ' MsgBox "对应的配送提示内容" ' End If End If End Sub
方案2:Select Case结构(适合大量邮编,更易维护)
Private Sub Worksheet_Change(ByVal Target As Range) ' 避免多单元格批量修改时报错 If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:Z99")) Is Nothing Then Select Case Target.Value Case "xxx xxx" MsgBox "HI-AB DELIVERY REQUIRED." Case "axx xx" MsgBox "NO DELIVERIES BEFORE 8AM." ' 扩展更多规则只需添加新的Case分支 ' Case "yyyy yy" ' MsgBox "对应的配送提示内容" End Select End If End Sub
额外说明
- 添加
If Target.Cells.Count > 1 Then Exit Sub是为了防止用户批量修改多个单元格时,因Target是多单元格区域导致代码报错。 - 两种方案都支持无限扩展邮编规则,只需按照对应格式添加新的判断分支即可。
内容的提问来源于stack exchange,提问作者William Sidaway
相关产品推荐
相关产品推荐

