2012-12-12 4 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