VBA代码出现End With/End If编译错误,求修正方案
修正VBA编译错误:解决「End With without With」/「End If without If」问题
修正后的完整代码
Sub ProcessOutgoingSheets() Dim wsACH As Worksheet, wsWire As Worksheet Dim wsOutgoing As Worksheet Dim isACHEmpty As Boolean, isWireEmpty As Boolean ' 尝试获取目标工作表 On Error Resume Next Set wsACH = ThisWorkbook.Worksheets("OUTGOING ACH") Set wsWire = ThisWorkbook.Worksheets("OUTGOING WIRE") On Error GoTo 0 ' 判断工作表是否为空(基于UsedRange,可按需调整判断逻辑) isACHEmpty = (wsACH Is Nothing) Or (wsACH.UsedRange.Cells.Count = 1 And IsEmpty(wsACH.UsedRange.Value)) isWireEmpty = (wsWire Is Nothing) Or (wsWire.UsedRange.Cells.Count = 1 And IsEmpty(wsWire.UsedRange.Value)) ' 情况1:两表均为空 If isACHEmpty And isWireEmpty Then If Not wsACH Is Nothing Then wsACH.Delete If Not wsWire Is Nothing Then wsWire.Delete MsgBox "两个OUTGOING工作表均为空,已全部删除" Exit Sub End If ' 情况2:仅ACH非空 If Not isACHEmpty And isWireEmpty Then ' 格式化操作示例 With wsACH .Columns("A:Z").AutoFit .Range("A1").Font.Bold = True ' 可添加更多格式化代码 End With wsACH.Name = "OUTGOING" If Not wsWire Is Nothing Then wsWire.Delete Exit Sub End If ' 情况3:仅WIRE非空 If isACHEmpty And Not isWireEmpty Then ' 格式化操作示例 With wsWire .Columns("A:Z").AutoFit .Range("A1").Font.Bold = True ' 可添加更多格式化代码 End With wsWire.Name = "OUTGOING" If Not wsACH Is Nothing Then wsACH.Delete Exit Sub End If ' 情况4:两表均非空 If Not isACHEmpty And Not isWireEmpty Then ' 格式化ACH表 With wsACH .Columns("A:Z").AutoFit .Range("A1").Font.Bold = True ' 可添加更多格式化代码 End With ' 格式化WIRE表 With wsWire .Columns("A:Z").AutoFit .Range("A1").Font.Bold = True ' 可添加更多格式化代码 End With ' 合并WIRE数据到ACH(跳过表头) wsWire.UsedRange.Offset(1).Copy Destination:=wsACH.Cells(wsACH.Rows.Count, "A").End(xlUp).Offset(1) wsACH.Name = "OUTGOING" wsWire.Delete MsgBox "两个OUTGOING工作表已合并为OUTGOING" End If End Sub
错误原因说明
原代码的编译错误本质是嵌套结构闭合顺序混乱,常见诱因包括:
- With块未完整闭合就提前写入End With,或多层With嵌套层级错位
- If语句的分支未一一对应End If,比如漏写/多写闭合语句,或内层If未先闭合就闭合外层If
- 跳转语句(如GoTo)打乱了代码结构,导致编译器无法识别闭合关系
修正后的代码把逻辑拆分为四个互斥分支,每个分支内的With/If都严格一一对应,避免了深层嵌套,同时清晰实现了需求:
- 先判断工作表的存在性与空表状态
- 分场景处理空表删除、单表格式化重命名、双表合并等操作
- 所有代码块的闭合语句与起始语句严格匹配
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

