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

Excel VBA For循环编译失败 提示End If无对应If语句求解

错误原因

两个核心问题直接导致编译报错+逻辑不符合预期:

  1. 多余的End If:内层判断If source_total_hours = "TOTALE ORE" Then Exit For是单行If写法,这种语法不需要配套End If。你在内层循环后写的那个End If会提前闭合外层的日期匹配判断,导致代码最后真正对应外层判断的End If找不到匹配的If,直接触发编译错误。
  2. 遍历范围完全写错:source_month.Offset(50, 0)是单个单元格(仅指向目标单元格往下第50行的那一个格),根本不是“从目标单元格开始向下扫描50行”的范围,完全达不到你要的查找效果。
修正后可运行代码
Dim found_total As Range
Set found_total = Nothing
For Each source_month In wb_source.Range("A1:A600")
    If source_month.Value = "01/05/2022" Then
        ' 修正范围:从目标单元格下一行开始,A列向下取50行作为查找区域
        For Each source_total_hours In source_month.Offset(1, 0).Resize(50, 1)
            If source_total_hours.Value = "TOTALE ORE" Then
                Set found_total = source_total_hours
                Exit For
            End If
        Next source_total_hours
        
        ' 没找到"TOTALE ORE"时跳过后续取数,避免引用错误单元格
        If Not found_total Is Nothing Then
            ' 取TOTALE ORE所在行向右偏移3列开始的50个单元格数值
            For Each source_hours In found_total.Offset(0, 3).Resize(1, 50)
                If IsNumeric(source_hours.Value) Then
                    hours_list.Add source_hours.Value
                End If
            Next source_hours
            
            ' 取目标单元格下一行开始A列50行的日期,如果你要横向取同一行日期就把Resize改成(1,50)
            For Each source_date In source_month.Offset(1, 0).Resize(50, 1)
                If IsDate(source_date.Value) Then
                    date_list.Add source_date.Value
                End If
            Next source_date
        End If
    End If
Next source_month
注意事项
  • VBA里If分两种写法:单行If(If 条件 Then 执行语句全写在一行)不需要End If;块If(Then后换行写多行逻辑)必须配套End If闭合,不要混用。
  • Resize(行数, 列数)如果省略其中一个参数,会默认保持当前单元格的对应维度,比如单个单元格调用Resize(,50)就是取1行50列的横向区域,Resize(50,)才是取50行1列的纵向区域,根据你实际表格的行列结构调整参数即可。
  • 新增found_total变量存储找到的目标单元格,避免50行范围内没找到"TOTALE ORE"时,后续代码错误引用遍历结束的位置取数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:19:19