单元格更新的视觉基本增量

时间:2018-07-25 17:31:33

标签: excel vba visual-studio excel-vba

当前尝试获取每个单元格的更新并将其存储在基本为A55的单元格中,每个更新行一行。因此,从A55开始,然后是下一个更新A56,然后是A57,以此类推。尽管当前代码卡在单元格55中:

Private Sub Worksheet_Calculate()
    Dim target As Range
    Set target = Range("U13")
    Dim Counter As Integer
Counter = 55
    If Not Intersect(target, Range("U13")) Is Nothing Then
   Cells(Counter, "A").value = target
    End If
      Counter = Counter + 1
End Sub

3 个答案:

答案 0 :(得分:1)

只需计数A列中的行

Private Sub Worksheet_Calculate()
    Dim target As Range, LstRw As Long

    Set target = Range("U13")
    LstRw = Cells(Rows.Count, "A").End(xlUp).Row + 1

    If LstRw < 55 Then LstRw = 55

    If Not Intersect(target, Range("U13")) Is Nothing Then
        Cells(LstRw, "A").Value = target
    End If

End Sub

答案 1 :(得分:1)

不确定何时要运行init()时,必须选择一个事件。但是每次运行Worksheet_Calculate()之后,它都会递增。

Public Counter As Integer

Sub Init()
    Counter = 55
End Sub

Private Sub Worksheet_Calculate()
    Dim target As Range
    Set target = Range("U13")

    If Not Intersect(target, Range("U13")) Is Nothing Then
    Sheet1.Cells(Counter, "A").Value = target
    End If
    Counter = Counter + 1
End Sub

答案 2 :(得分:1)

创建一个辅助单元格来存储您的计数器值,并在退出前递增和更新该单元格的值。

如果您为单元格使用命名范围,例如MyCounter,则将代码修改为此:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Counter As Integer

Counter = Range("MyCounter").Value

If Not Intersect(Target, Range("U13")) Is Nothing Then
    Cells(Counter, 1).Value = Target
    Range("MyCounter").Value = Counter + 1
End If

End Sub

我将事件类型更改为Worksheet_ChangeWorksheet_Calculate不允许您将目标作为范围传递。

您使用Set target = Range("U13")然后使用Intersect(target, Range("U13"))的方法意味着target始终等于Range("U13"),因此,当任何原因引起计算事件时,这将始终执行,而不仅仅是更改为单元格U13。听起来不是您想要的。

此外,增量计数器必须位于IF语句中,否则它将在每个事件(而不只是要检查的事件)上递增。

这是屏幕截图

Increment on cell update using helper cell

注意:这显示5次更新后的结果。

单元格Y1命名为“ MyCounter”,并将其初始化为55。然后,每次更改单元格U13的值时,它将把该值放入MyCounter指向的行中,然后递增MyCounter。

我建议您将辅助单元格放置在另一张纸上,而不要像在示例中那样放置在另一张纸上,但是如果您这样做,则应更新代码以在范围引用中包含纸页名称,例如{{1 }}。希望能有所帮助。