在工作表(1)中,我有多个计划更改单元格,A1和其他单元格,其他单元格值取决于我设置函数时的A1值(例如,B1 = A1 + 1)。这样,如果我改变A1的值,其他单元格也会改变值,并且总改变的单元格将是A1加上其他改变的单元格。但是,作为"其他细胞的数量"当我在VBA中运行以下函数时,它非常大:
Private Sub Worksheet_Change(ByVal Target As Range)
Cells(Target.Cells.Count, 21) = "ok"
End Sub
第21列将出现3" ok" s,因为大单元格的变化按顺序发生,它激活了Worksheet_Change函数的三倍。 (第一个确定我改变A1,第二个用于更新功能的时间延迟,第三个用于最后一个单元格)但是,我只希望Worksheet_Change在我改变A1的值后捕获最终单元格的变化,我该怎么办?做以避免以前捕获Worksheet_Change函数?
答案 0 :(得分:0)
将代码修改为仅在A1更改时运行。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
Cells(1, 21).Value = "ok"
End If
End Sub
答案 1 :(得分:0)
目标通常不只是一个单元格。确定其中一个更改的单元格是否为带有相交的A1,然后仅处理A1。
如果您打算在同一工作表上更改值,请暂时关闭事件处理,以便Worksheet_Change不会尝试在其自身上运行。
Private Sub Worksheet_Change(ByVal Target As Range)
if not intersect(target, range("a1")) is nothing then
on error goto safe_exit
application.enableevents = false
dim trgt as range
for each trgt in intersect(target, range("a1"))
Cells(trgt.row, 21) = "ok"
next trgt
end if
safe_exit:
application.enableevents = true
End Sub
由于我不相信a1是你现实世界中Target的实际目标,因此我已经使代码比它可能需要的更加冗长。