我是 Excel VBA 的新手,目前正在进行一个项目,需要根据 B 列中填充的范围自动填充 A 列中的序列号。
使用我在 ozgrid.com 论坛中找到的以下代码,它会自动填充 A 列从 1 到相邻单元格(即 B 列)中最后使用的行。但就我而言,我有一个用户窗体,它有一个命令按钮,单击该按钮时,它应该继续在 A 列中生成唯一的参考 ID,从 A 列中最后填充的单元格的最大数字到相邻单元格(即 B 列)中最后填充的单元格。
下面的代码存在一个问题,就是第一次点击命令按钮时,它会生成从 1 到 B 列中最后使用的行之间的序列号,但是再次点击命令按钮时,A 列会再次自动从 1 填充到最后使用的行,而不是继续使用 A 列中存在的最大数字。
例如,第一次单击命令按钮时的最大数字是 82。下次单击命令按钮时,最后使用的行下方的单元格应该是 83,直到再次到达 B 列中最后使用的行。
此外,我在下面提供了我的 GUI 图片,以供您更好地参考。
Sub SequenceLoop()
Dim k, i As Long, n As Long
Dim LR1 As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
LR1 = ws.Range("B" & ws.Rows.Count).End(xlUp).Row
With Range("A2:A" & LR1)
k = .Value
For i = 1 To UBound(k, 1)
If Len(k(i, 1)) = 0 Then
n = n + 1
k(i, 1) = n
End If
Next
.Value = k
End With
End Sub
用于自动填充 B 列数据的 GUI。单击“创建模板”按钮时,它会自动填充 B 列中的特定数据:
用于自动填充 A 列序列号的 GUI:
答案1
该解决方案看起来有点笨重,但如果不了解您要执行的操作,我不会建议进行广泛的更改。
解决方案很简单,你只需要初始化n到列表中的最后一个值之前为了循环。现在的写法是,n每次运行宏时都会重置为零。
类似下面的方法可以达到这个效果。
n = Cells(Rows.Count, 1).End(xlUp).Value