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
相关产品推荐
相关产品推荐

