You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA代码运行提示Next without For错误该如何解决?

错误原因与修复方案

Next without For报错的直接原因是代码中If CompletedField = "No" Then没有对应的End If闭合,VBA编译时无法匹配层级结构,就会抛出该错误。除此之外你的代码还存在多处逻辑错误,无法实现需求,完整修复后的代码如下:

Sub SplitDataByAddress()
    Dim AddressField As Range
    Dim AddressName As Range
    Dim NewWSheet As Worksheet
    Dim WSheet As Worksheet
    Dim WSheetFound As Boolean
    Dim DataWSheet As Worksheet

    Set DataWSheet = Worksheets("Data")
    Set AddressField = DataWSheet.Range("A4", DataWSheet.Range("A4").End(xlDown))

    Application.ScreenUpdating = False

    For Each AddressName In AddressField
        ' 先判断当前行Completed是否为N,不是就直接跳过
        If UCase(AddressName.Offset(0, 4).Value) = "N" Then
            WSheetFound = False
            ' 遍历工作表判断是否已存在对应地址的表
            For Each WSheet In ThisWorkbook.Worksheets
                If WSheet.Name = AddressName.Value Then
                    WSheetFound = True
                    Exit For
                End If
            Next WSheet
            
            If WSheetFound Then
                ' 已有工作表就追加数据
                AddressName.Resize(1, 5).Copy _
                    Destination:=Worksheets(AddressName.Value).Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
            Else
                ' 没有就新建工作表,先复制表头再复制数据
                Set NewWSheet = Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
                NewWSheet.Name = AddressName.Value
                DataWSheet.Range("A3", DataWSheet.Range("A3").End(xlToRight)).Copy Destination:=NewWSheet.Range("A3")
                AddressName.Resize(1, 5).Copy Destination:=NewWSheet.Range("A4")
            End If
        End If
    Next AddressName

    ' 所有表自动适配列宽
    For Each WSheet In ThisWorkbook.Worksheets
        WSheet.UsedRange.Columns.AutoFit
    Next WSheet

    Application.ScreenUpdating = True
End Sub

主要修改点

  • 补全了缺失的End If语句,修复编译报错
  • 删除了全局的CompletedField变量,改为取当前Address单元格向右偏移4列(对应E列Completed)的值判断,判断值改为需求要求的"N",同时加了Ucase避免大小写问题
  • 调整了判断逻辑顺序,先判断当前行是否符合复制条件,不符合直接跳过,减少无意义的遍历操作
  • 修正了已有工作表追加数据的定位逻辑,用Range("A" & Rows.Count).End(xlUp)替代原来的Range("A3").End(xlDown),避免空表时定位到最后一行的问题
  • 修正了工作表名称判断的逻辑,统一用AddressName.Value取值,避免隐式类型转换错误

内容的提问来源于stack exchange,提问作者JBird100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:30:00