2012-12-12 44 views
0

我正在尝试更新输入到单元格中的值Column A。我有以下脚本几乎可以按预期工作。它会更新单元格,但会继续更新,直到达到指数级数目。Excel - 将单元格的内容乘以12,只有一次

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

您的更改将再次触发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 
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 
相关问题