如何使最后一行的值为静态值



下面是代码:

Public n as Long ' <--above sub procedure
 With Sheets("Sheet1").Range("A6").Offset(n, 0)
    If n = 0 Then
        .Value =  1
    Else
        .Value =  .Parent.Range(.Address).Offset(-1, 0) + 1
    End If
    n = n + 1
End With

(见下图)如果我删除4,然后再次单击命令按钮,它就会重置回1。我想让它成为静态的,所以即使我删除了行的最后一个值,它仍然从最后一个数值开始继续递增。

Store number
1
2
3
4

试试这个:

Sub Test()
    Dim trow As Long
    With Sheets("Sheet1") '~~> change to suit
        trow = .Range("A:A").Find(vbNullString, [A5]).Row
        With .Range("A" & trow)
            If trow = 6 Then .Value = 1 _
            Else .Value = .Offset(-1, 0).Value + 1
        End With
    End With
End Sub

上面的代码查找第一个空白单元格。如果是A6,则会指定值1。
否则,它会将上一个单元格值加1。这就是你想要的吗?

第1版:解释

trow = .Range("A:A").Find(vbNullString, [A5]).Row

这将查找列A中从A5开始的第一个空行。
[A5]用于返回Range("A5")对象。所以它也可以写成:

trow = .Range("A:A").Find(vbNullString, .Range("A5")).Row

我们在范围对象查找方法中使用VBA vbNullString常量作为What参数
Find Method返回一个Range Object,所以上面也可以这样写:

Sub Test()
    Dim r As Range
    With Sheets("Sheet1") '~~> change to suit
        Set r = .Range("A:A").Find(vbNullString, [A5])
        With r
            If .Row = 6 Then .Value = 1 _
            Else .Value = .Offset(-1, 0).Value + 1
        End With
    End With
End Sub

你想要的是,一个有内存的按钮听起来并不是只使用VBA就能解决的。您可能在隐藏工作表上有一个列表,每次按下commandButton时都会向其中添加一个值,并将列表值的最大值写回目标单元格?

或者,您可以使用开发人员选项卡的表单控制部分的滚动条进行调查,该滚动条带有指向目标单元格的链接。我经常在交互式表格中使用这种技术。

命名测距法

Public sub btnPress
    dim val as long
    val = Range("PreviousCellValue")
    set Range("PreviousCellValue") = val+1
    Sheets("Sheet1").Range("A6").Offset(n, 0).value = Range("PreviousCellValue")
End sub btnPress

最新更新