2016-11-03 3 views
0

워크 시트에서 영역을 포맷하려고합니다.엑셀 vba 범위 오프셋 범위 상대

변경 사항을 항상 업데이트하도록 Worksheet_Change를 사용하고 있습니다.

제 목표는 지역의 모든 세포를 보는 것입니다. 현재 셀이 비어 있고 왼쪽의 셀에 숫자 값 0이 있으면 현재 셀에 "N/A"텍스트를 입력하고 싶습니다.

오프셋을 사용할 수 없기 때문에 시도가 실패했습니다.

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim updateCells As Range 
    Dim myCell As Range 

    Set updateCells = Range("B1:M1000") 

    For Each myCell In updateCells 
     ' NEXT LINE WRONG!! 
     If myCell.Offset(0, -1).Value = 0 Then 
      myCell.Interior.ColorIndex = 4 
     End If 

    Next 

End Sub 

모든 지침을 제공합니다.

+0

을'갈 것 (-1, 0)'왼쪽이 아닌'오프셋 (0, -1)' –

+0

안녕 스콧에 위의 셀에서 찾고있다 , 의견을 보내 주셔서 감사합니다. 나는 그것을 잘못 복사했다. 그러나이 변경조차도 잘못되었습니다. 내 설정과 루프가 범위를 벗어 났습니까? – LiamD

답변

1

대상의 셀이 Range("B1:M1000")에 있는지 테스트 할 것입니다. ActiveSheet의 값을 Worksheet_Change 이벤트에서 변경할 때 이벤트를 항상 꺼야합니다.

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 

    Dim r As Range 
    For Each r In Target.Cells 
     If Not Intersect(r, Range("B1:M1000")) Is Nothing Then 
      If r.Value = "" And Not r.Offset(0, -1).Value = "" And r.Offset(0, -1).Value = 0 Then 
       r.Value = "N\A" 
       r.Interior.ColorIndex = 4 
      Else 
       r.Interior.ColorIndex = -4142 
     End If 
    Next 

    Application.EnableEvents = True 
End Sub 
+0

토마스 - 멋지다! 이것은 대우를 작동합니다. – LiamD

1

내가 이런 식으로 오프셋

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range, myRng As Range 

    On Error GoTo ExitSub '<--| be sure to exit sub in a managed way and restore events handling 
    Set myRng = Intersect(Target, Range("B1:M1000")).SpecialCells(xlCellTypeBlanks) '<--| get blank changed cells belonging to relevant range 
    Application.EnableEvents = False '<--| turn rvents handling ofF 
    For Each rng In myRng '<--| loop through filtered range only 
     If Not rng.Offset(0, -1).Value = "" And rng.Offset(0, -1).Value = 0 Then 
      rng.Value = "N\A" 
      rng.Interior.ColorIndex = 4 
     Else 
      rng.Interior.ColorIndex = -4142 
     End If 
    Next 

    ExitSub: 
    Application.EnableEvents = True '<--| turn events handling on 
End Sub 
+0

좋은데, 나는 On Error before. SpecialialCells를 추천 할 것입니다. – Slai

+0

@Slai, 맞습니다. 그것은 또한 후속 "IF myRng ..."를 불필요하게 만듭니다. 수정 됨 – user3598756