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

Excel VBA计时器停止后自动将值写入指定列下一行的实现求助

解决方案

你只需要通过VBA获取对应列最后一个有数据的行号,再加1就能得到下一个空白行的位置,替换原来的静态单元格地址即可。

修改后的完整代码

Dim Start As Single, RunTime As Single
Dim ElapsedTime As String
' 声明变量存储动态行号
Dim nextRowF As Long, nextRowE As Long

Range("A1").Value = 0
Range("K8").Value = "In Progress"
Range("K8").Interior.Color = 5296274

Start = Timer

Do While Range("A1").Value = 0
    DoEvents
    RunTime = Timer
    ElapsedTime = Format((RunTime - Start) / 86400, "hh:mm:ss")
    Range("C4").Value = ElapsedTime
    Application.StatusBar = ElapsedTime
Loop

Range("C4").Value = ElapsedTime
Range("K8").Interior.Color = 192
Range("K8").Value = "Ended"
Application.StatusBar = False

Application.Wait DateAdd("s", 3, Now) ' 等待3秒

Range("K8").Interior.Color = RGB(255, 255, 255)
Range("K8").Value = ""
Range("I5").Value = ""
Range("A1").Value = 0
Range("C4").Value = 0

' 动态获取E列最后一行+1作为目标行,如果不需要E列动态可以保留原来的E11
nextRowE = Cells(Rows.Count, "E").End(xlUp).Row + 1
' 避免首行空白时定位到第1行,如果你要从第11行开始写入,加个判断
If nextRowE < 11 Then nextRowE = 11
Range("F8").Copy Range("E" & nextRowE)

' 动态获取F列最后一行+1作为目标行
nextRowF = Cells(Rows.Count, "F").End(xlUp).Row + 1
' 保证从第11行开始写入,避免前面行空白时写入到更靠上的位置
If nextRowF < 11 Then nextRowF = 11
Range("F9").Copy Range("F" & nextRowF)

改动说明

  • 新增了nextRowF和nextRowE两个长整型变量,用来存储动态计算的目标行号
  • Cells(Rows.Count, "F").End(xlUp).Row 会从F列最底部的单元格向上查找,返回最后一个有内容的单元格行号,加1就是下一个空白行的位置
  • 增加了行号下限判断If nextRowF < 11 Then nextRowF = 11,保证就算F列前10行全是空白,也会从第11行开始写入,和你原来的起始位置保持一致
  • 如果不需要E列的目标位置也动态,删掉nextRowE相关的代码,保留原来的Range("F8").Copy Range("E11")即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:06:07