vba条件格式循环失败

时间:2013-09-13 13:35:08

标签: excel vba excel-vba conditional-formatting

我的代码几乎可以使用:

Sub condFormat()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    ws.Columns("B:B").FormatConditions.Delete
    ws.Columns("B:B").FormatConditions.Add Type:=xlExpression, Formula1:="=LEN(B1)>100"
    ws.Columns("B:B").FormatConditions(1).Interior.ColorIndex = 3
Next
End Sub

但它不会正确更新实际的单元格。

我最终得到的结果如下:

=LEN(B65517)>100
b列单元格中的

如何修改此项以引用B列中的正确单元格?

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:3)

可以根据当前选定的单元格移动单元格引用。

您可以为B列添加绝对引用:

  

ws.Columns(“B:B”)。FormatConditions.Add类型:= xlExpression,   一级方程式:= “= LEN($ B1)→100”

但最简单的方法是明确选择一个单元格,可能是A1:

  

ws.Activate

     

ws.Cells(1,1)。选择

来自Microsoft的

Here is a link解释了这个问题。

答案 1 :(得分:0)

我最后只是做了一个循环,因为我无法让它以其他方式工作:

Sub condFormat()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim myRange As Range, c As Range
For Each ws In ActiveWorkbook.Worksheets
    ws.Activate
    ws.Columns("B:B").FormatConditions.Delete
    Set myRange = Range("B2", Cells(Rows.Count, "B").End(xlUp))
    For Each c In myRange
    If Len(c) > 100 Then c.Interior.ColorIndex = 3
    Next
Next
Application.ScreenUpdating = True
End Sub