2016-11-03 217 views
0

我想在工作表中格式化一个区域。excel 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

不错,但我会建议在错误.SpecialCells – Slai

+0

@Slai之前,你是对的。这也使得后续的“如果myRng ...”不必要。编辑 – user3598756