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

Excel VBA获取指定列首个空白行行号及1004报错解决

问题分析

原代码依赖SpecialCells(xlCellTypeBlanks)查找空白单元格,但当E列从E2到最后一行完全没有空白单元格时,该方法找不到目标对象,就会触发“运行时错误'1004'”。另外,原代码中NextFree - 1的逻辑和你的需求不符——你需要的是首个空白行号(如23496),但该代码输出的是最后有值行的行号(23495)。

解决方案:可靠的替代代码

推荐使用End(xlUp)方法,它能精准定位列中最后一个有数据的单元格,不受中间空白或全列满数据的影响,适配2万条级别的数据量:

Sub GetNextBlankRow()
    Dim wsBajada As Worksheet
    Dim lastDataRow As Long
    Dim nextBlankRow As Long
    
    ' 定义工作表对象,减少重复调用开销
    Set wsBajada = ThisWorkbook.Worksheets("Bajada")
    
    ' 从E列最底部往上定位最后一个非空单元格的行号
    lastDataRow = wsBajada.Cells(wsBajada.Rows.Count, "E").End(xlUp).Row
    
    ' 首个空白行 = 最后有数据行 + 1
    nextBlankRow = lastDataRow + 1
    
    ' 将结果写入Muestra工作表的O10单元格
    ThisWorkbook.Worksheets("Muestra").Range("O10").Value = nextBlankRow
End Sub
代码说明
  • wsBajada.Rows.Count:获取当前工作表的总行数,兼容不同Excel版本的行数差异
  • End(xlUp):模拟手动按Ctrl+↑的操作,快速定位最后一个非空单元格
  • 若E列完全为空,lastDataRow会返回1(Excel默认起始行),nextBlankRow自动设为2,符合从E2开始的需求
修复原代码的备选方案

如果要基于原代码修改,可添加错误捕获机制处理无空白单元格的情况:

Sub Main_Fixed()
    Dim NextFree As Long
    
    ' 开启错误捕获,避免找不到空白单元格时报错
    On Error Resume Next
    NextFree = Worksheets("Bajada").Range("E2:E" & Rows.Count).SpecialCells(xlCellTypeBlanks).Row
    On Error GoTo 0 ' 关闭错误捕获
    
    ' 若未找到空白单元格(E2到末尾全有数据),计算最后一行的下一行
    If NextFree = 0 Then
        NextFree = Worksheets("Bajada").Cells(Rows.Count, "E").End(xlUp).Row + 1
    End If
    
    ' 直接输出NextFree即可,无需减1,匹配你要首个空白行号的需求
    Worksheets("Muestra").Range("O10").Value = NextFree
End Sub

内容的提问来源于stack exchange,提问作者Sebastián Frades

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:50:59