0

我正在尝试更新输入到单元格中的值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 等)

4

2 回答 2

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
于 2012-12-12T15:38:42.823 回答
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
于 2012-12-12T15:41:43.410 回答