2016-09-13 3 views
0

일부 셀의 입력 값을 확인하기 위해 매크로를 작성했습니다. 입력이 8보다 크면 초과가 다른 셀에 쓰여지고 입력은 8로 변경되고 입력이 8보다 낮 으면 누락 된 금액이 세 번째 셀에 기록됩니다. 이 나는 ​​문제는 매크로 만 내가 셀을 선택하면 내가 다시 입력을 입력 할 때 실행하지만,되지 않는 것입니다 매크로 값을 편집하는 매크로

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
TA = Target.Address: R = Target.Row: C = Target.Column 
If C = 2 Or C = 7 Then 
    If (R < 19 And R > 11) Or (R < 33 And R > 25) Then 
    Hours = Cells(R, C).Value 
    If Hours <> 0 Then 
     If Hours > 8 Then 
     Cells(R, C) = 8 
     Cells(R, C + 1) = Hours - 8 
     End If 
     If Hours < 8 Then 
     Cells(R, C + 2) = 8 - Hours 
     End If 
    End If 
    End If 
End If 
End Sub 

을 쓴 코드입니다. 오류는 어디에 있습니까?

답변

1

먼저 트리거 이벤트를 에서 변경하십시오. Worksheet_SelectionChange to Worksheet_Change.

및 속성을 Target으로 읽을 수 있으므로 코드를 최적화 할 수 있습니다. 코드에 몇 개의 행을 저장할 수 있습니다.

셋째, Select Case으로 전환하여 테스트 조건을 수정하여이 조건에 쉽게 행을 추가 할 수 있습니다.

인접 셀에 결과를 삽입하려면 Target.offset을 사용하십시오.

Exit Sub을 입력 했으므로 여기서 값을 변경 한 후에는 추가 시간이 실행되지 않습니다.

원하는 경우이 값을 읽는 전역 변수가없는 한 Hours은 필요하지 않으므로 제거 할 수도 있습니다.

당신은

Private Sub Worksheet_Change(ByVal Target As Range) 

' check if target is in Column B or Column G 
If Target.Column = 2 Or Target.Column = 7 Then 

    Select Case Target.Row 
     Case 12 To 18, 26 To 32 ' check if target row is 12 to 18 (including) ir between 26 to 32 (including) 

      Hours = Target.Value 
      If Hours <> 0 Then 
       If Hours > 8 Then 
        Target.Value = 8 
        Target.Offset(0, 1).Value = Hours - 8 
        Exit Sub 
       Else 
        If Hours < 8 Then 
         Target.Offset(0, 2).Value = 8 - Hours 
        End If 
        Exit Sub 
       End If 
      End If 
    End Select 
End If 

End Sub 
) If Target.Value <> 0 Then 등을 사용할 수 있습니다