我试图添加这样的条件格式:
如果表达式=($G5<>"")
然后将设置内部设置为绿色,则将其用于 $A$5:$H$25。
试过这个,工作正常,正如预期的那样,然后尝试使用以下代码将其调整为 VBA 代码,这是有效的,但不符合预期:
With ActiveSheet.UsedRange.Offset(1)
.FormatConditions.Delete
'set used row range to green interior color, if "Erledigt Datum" is not empty
With .FormatConditions.Add(Type:=xlExpression, _
Formula1:="=($" & cstrDefaultProgressColumn & _
.row & "<>"""")")
.Interior.ColorIndex = 4
End With
End With
问题是,.row
在调试时提供了正确的行,但是我添加的条件公式似乎关闭了一行或多行-取决于我设置行的解决方案。所以我最终得到了一个条件格式,它对行有一个偏移量,应该已经被格式化了。
在对话框中它是=($G6<>"")
G3 或 G100310 或类似的东西。但不是我想要的 G5。
设置行必须是动态的,因为这用于在不同的工作表上设置条件格式,这些工作表的数据可以从不同的行开始。
我怀疑我的With
安排,但它并没有解决这个问题。
编辑:更具体地说,这不是UsedRange 问题,也有同样的问题:
Dim rngData As Range
Set rngData = ActiveSheet.Range("A:H") 'ActiveSheet.UsedRange.Offset(1)
rngData.FormatConditions.Delete
With rngData.FormatConditions.Add(Type:=xlExpression, _
Formula1:="=($" & cstrDefaultProgressColumn & _
1 & "<>"""")")
.Interior.ColorIndex = 4
End With
我的数据如下所示:
1 -> empty cells
2 -> empty cells
3 -> empty cells
4 -> TitleCols -> A;B;C;...;H
5 -> Data to TitleCols
. .
. .
. .
25
当我在 Excel 2007 上执行此编辑后的代码并在条件对话框中查找公式时,它是=($G1048571<>"")
- 它应该是=($G1<>"")
,然后一切正常。
更奇怪的是 - 这是一个工作良好的代码的编辑版本,用于为每一行添加条件格式。但后来我意识到,可以编写一个表达式,格式化整行或其中的一部分 - 以为这会在一分钟内适应,现在这个^^
编辑: 附加任务信息
我在这里使用条件格式,因为这个函数应该设置一个表格来对用户输入做出反应。因此,如果正确设置并且用户编辑了此表的条件化列中的某些单元格,则相应行将变为绿色,用于使用的行范围。
现在,因为在主标题行之前可能有行,并且可能有不同数量的数据列,而且目标列可能会改变,所以我当然会使用一些特定的信息。
为了使它们最小化,我确实使用 NamedRanges 来确定正确的偏移量并确定正确的DefaultProgessColumn
.
GetTitleRow
用于通过 NamedRange 或 header-contents 确定 header-row。
With ActiveSheet.UsedRange.Offset(GetTitleRow(ActiveSheet.UsedRange) - _
ActiveSheet.UsedRange.Rows(1).row + 1)
更正了我的公式 1,因为我发现之前的构造没有很好地形成。
Formula1:="=(" & Cells(.row, _
Range(strMatchCol1).Column).Address(RowAbsolute:=False) & _
"<>"""")"
strMatchCol1
- 是范围的名称。