我正在尝试更新Column A
中输入到单元格的值。我有以下脚本几乎按预期工作。它会更新单元格,但会继续更新,直到达到指数级数。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
intcolumn = Target.Column
introw = Target.Row
Cells(introw, intcolumn) = Cells(introw, intcolumn) * "12"
End If
End Sub
有没有办法让它能让我这样做,所以我可以在A中输入任何数字?并且它只乘以12一次? (1 = 12,2 = 24,3 = 36,4 = 48等)
答案 0 :(得分:2)
您的更改是再次触发Worksheet_Change事件。你需要有某种旗帜来跟踪它:
Private changeFlag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Not changeFlag Then
changeFlag = True
intcolumn = Target.Column
introw = Target.Row
Cells(introw, intcolumn).Value = Cells(introw, intcolumn).Value * 12
Else
changeFlag = False
End If
End Sub
答案 1 :(得分:2)
乘以单元格值会触发Worksheet_Change
事件,该事件会触发此宏。因此,当您在单元格A1中输入“1”时,这是一个导致乘法1 * 12 = 12的更改,但此也是一个更改,这会导致12 * 12 = 144,这是也是一个改变等,这就是它重复的原因。
这应该修复它,在执行操作之前禁用事件,然后在退出子例程之前重新启用事件:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Application.EnableEvents = False 'Prevent looping based on the 'change' caused by multiplication
intcolumn = Target.Column
introw = Target.Row
Cells(introw, intcolumn) = Cells(introw, intcolumn) * "12"
Application.EnableEvents = True 'allow events again
End If
End Sub