2012-12-12 89 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 
相關問題