Excel - 将单元格的内容乘以12,仅一次

时间:2012-12-12 15:31:08

标签: excel vba

我正在尝试更新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等)

2 个答案:

答案 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