2016-11-03 286 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