2014-10-01 190 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