저는 Excel-VBA 초보자이며 워크 시트의 셀 값을 변경하는 누군가에 의해 트리거되는 짧은 코드를 작성하려고합니다. 0보다 작은 경우 변경된 셀의 값을 0으로 설정해야합니다. 코드는 다음과 같습니다Worksheet_Change 이벤트의 대상 범위가 올바르지 않습니다.
Private Sub Worksheet_Change(ByVal Target As Range)
'Debug.Print Target.Address
If Target.Column = 6 Then
For Each Cell In Target.SpecialCells(xlCellTypeConstants, 3)
If Cell.Value < 0 Then
Cell.Value = 0
End If
Next
End If
End Sub
지금 무슨 일 것은 내가 열 6 셀의 값을 변경할 때, 0보다 작은 숫자가 포함 된 시트의 모든 셀 도가 제로로 변경 것입니다.
Worksheet_Change
이벤트 처리기에 대해 만들어진 "대상"개체에만 셀/셀이 변경되어 있으므로 내 코드가 수정되어 이벤트를 트리거 한 셀의 값만 변경한다고 생각했습니다. 처음.
Debug.Print
을 사용하여 직접 개체의 주소를 출력하는 방법을 시도했습니다. 시트에있는 모든 셀의 주소를 0보다 작은 값으로 출력 했으므로 처리기가 여러 번 실행되었다고 가정합니다.
실제로 문제 자체에 대한 해결 방법을 찾았지만 내 질문은 다음과 같습니다. Worksheet_Change 이벤트를 어떻게 사용하지 못했고 앞으로 문제가 발생하지 않도록하려면 어떻게해야합니까?
application.enableevents = false를 사용하거나 이벤트 프로 시저가 자체적으로 실행됩니다. – Jeeped
'Target'은 변경된 셀에만 관련이 있으며 오류를 복제 할 수 없습니다. Jeeped의 개정을 시도하고 어떻게 시작하는지보십시오. – SJR
나중에 다시 'Application.EnableEvents = True'로 설정하는 것을 잊지 마십시오. 다음 번에 이벤트가 실행되지 않습니다. – Tom