当前尝试获取每个单元格的更新并将其存储在基本为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
答案 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_Change
。 Worksheet_Calculate
不允许您将目标作为范围传递。
您使用Set target = Range("U13")
然后使用Intersect(target, Range("U13"))
的方法意味着target
始终等于Range("U13")
,因此,当任何原因引起计算事件时,这将始终执行,而不仅仅是更改为单元格U13。听起来不是您想要的。
此外,增量计数器必须位于IF
语句中,否则它将在每个事件(而不只是要检查的事件)上递增。
这是屏幕截图
注意:这显示5次更新后的结果。
单元格Y1命名为“ MyCounter”,并将其初始化为55。然后,每次更改单元格U13的值时,它将把该值放入MyCounter指向的行中,然后递增MyCounter。
我建议您将辅助单元格放置在另一张纸上,而不要像在示例中那样放置在另一张纸上,但是如果您这样做,则应更新代码以在范围引用中包含纸页名称,例如{{1 }}。希望能有所帮助。