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

如何用VBA查找A-Z列最后已用行后的首空行并写入文本框值

解决A-Z列范围内定位最后已用行后首个空行的VBA方案

你之前用CountA(A:A)只能基于A列判断空行,如果A列有空白但其他列(比如B-Z)还有数据,就会导致写入位置错误;而直接用CountA(A:Z)会统计整个区域的非空单元格总数,不是我们需要的最后行号,这里给你两个可靠的解决方案:

方法一:用Find方法精准定位(推荐)

这个方法会在A-Z列范围内从下往上查找最后一个非空单元格,不管哪一列有数据,都能准确找到最后已用行,还能处理整个区域为空的情况:

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet")
    Dim lastRow As Long
    Dim newRow As Long
    
    ' 在A-Z列范围内反向查找最后一个非空单元格的行号
    On Error Resume Next ' 处理A-Z列全为空的情况
    lastRow = ws.Range("A:Z").Find(What:="*", _
                                   After:=ws.Range("A1"), _
                                   LookAt:=xlPart, _
                                   LookIn:=xlFormulas, _
                                   SearchOrder:=xlByRows, _
                                   SearchDirection:=xlPrevious, _
                                   MatchCase:=False).Row
    On Error GoTo 0
    
    ' 确定首个空行:如果全为空则从第1行开始,否则最后已用行+1
    newRow = IIf(lastRow = 0, 1, lastRow + 1)
    
    ' 写入文本框内容到对应列
    ws.Cells(newRow, 2).Value = TVehicle.Value
    ws.Cells(newRow, 3).Value = TPlace.Value
    ws.Cells(newRow, 4).Value = TRange.Value
    ws.Cells(newRow, 5).Value = TOD.Value
    ws.Cells(newRow, 6).Value = TIC.Value
    ws.Cells(newRow, 7).Value = TEC.Value
    ' 继续添加其他文本框的写入代码...
End Sub

代码说明

  • Find的SearchDirection:=xlPrevious参数是关键,从A1开始反向(从下往上)查找,确保找到的是A-Z列里最靠下的非空单元格。
  • 错误处理语句是为了防止A-Z列完全为空的情况,此时Find会返回Nothing,lastRow会保持0,通过IIf把newRow设为1。

方法二:用UsedRange配合空行检查

如果习惯用UsedRange,需要额外检查最后一行是否全为空(因为UsedRange可能包含之前用过后来清空的行):

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet")
    Dim lastRow As Long
    Dim newRow As Long
    
    ' 获取工作表已使用区域的最后一行
    lastRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row
    
    ' 检查最后一行在A-Z列是否全为空,往上遍历直到找到有数据的行
    Do While lastRow > 0 And Application.WorksheetFunction.CountA(ws.Range("A" & lastRow & ":Z" & lastRow)) = 0
        lastRow = lastRow - 1
    Loop
    
    newRow = lastRow + 1
    
    ' 写入文本框内容
    ws.Cells(newRow, 2).Value = TVehicle.Value
    ws.Cells(newRow, 3).Value = TPlace.Value
    ws.Cells(newRow, 4).Value = TRange.Value
    ws.Cells(newRow, 5).Value = TOD.Value
    ws.Cells(newRow, 6).Value = TIC.Value
    ws.Cells(newRow, 7).Value = TEC.Value
    ' 继续添加其他文本框的写入代码...
End Sub

代码说明

  • UsedRange会返回工作表中所有被编辑过的区域,但有时候删除内容后它不会自动收缩,所以需要通过CountA检查每行是否全为空,循环往上找到真正的最后已用行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:52:27