2014-10-01 130 views
1

我想條件格式使用VBA範圍內的單元格。我的目標是每次選擇一個單元格時,每個包含相同文本的單元格都將被格式化。vba條件格式化與Worksheet_SelectionChange

我的代碼:

Private Sub Worksheet_SelectionChange(ByVal t As Range)  
    Cells.FormatConditions.Delete 
    Range("B2:K29").Select 
    Selection.FormatConditions.Add Type:=xlTextString, String:=t.Value, _ 
    TextOperator:=xlContains 
    With Selection.FormatConditions(1).Font 
    .Bold = True 
    .Italic = False 
    .TintAndShade = 0 
    End With 
End Sub 

的問題是,我每次選擇一個單元格,範圍內的所有的單元格的格式(而不僅僅是具有相同文本的那些爲選定細胞)。

+0

您是否試過錄制宏並設置此格式以查看您的代碼是否正常? – nicolas 2014-10-01 22:28:27

+0

你看過條件格式窗口嗎?它作爲條件顯示什麼? – Degustaf 2014-10-01 22:30:12

回答

2

這個工作對我來說:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim c As Range 

    Set c = Target.Cells(1) 
    Me.Cells.FormatConditions.Delete 

    If Len(c.Value) > 0 Then 

    With Me.Range("B2:K29").FormatConditions.Add(Type:=xlTextString, _ 
         String:=c.Value, TextOperator:=xlContains) 
     With .Font 
      .Bold = True 
      .Italic = False 
      .TintAndShade = 0 
     End With 
    End With 
    End If 
End Sub 
+0

很好,謝謝! – OzW 2014-10-04 13:15:13

0

你想要什麼做已經由Tim提供所以選擇他的答案。
我只是把這張貼發給任何可能在這個問題上絆倒的人的另一種方法。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    On Error GoTo halt 
    Application.EnableEvents = False 
    Me.Cells.FormatConditions.Delete 
    If Target.Cells.Count = 1 And Not IsEmpty(Target) Then 
     With Me.Range("A1").FormatConditions.Add(Type:=xlTextString, _ 
        String:=Target.Value, TextOperator:=xlContains) 
      With .Font 
       .Bold = True 
       .Italic = False 
       .TintAndShade = 0 
      End With 
      .ModifyAppliesToRange Me.Range("B2:K29") 
     End With 
    End If 
forward: 
    Application.EnableEvents = True 
    Exit Sub 
halt: 
    MsgBox Err.Description 
    Resume forward 
End Sub