【发布时间】:2012-09-14 08:49:13
【问题描述】:
我试图添加这样的条件格式:
如果表达式=($G5<>"") 则将内部设置为绿色,将其用于$A$5:$H$25。
试过了,工作正常,正如预期的那样,然后尝试使用以下代码将其调整为 VBA-Code,它正在工作,但不符合预期:
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。
将行必须设置为dynamicall,因为这用于在不同的工作表上设置条件格式,这些工作表的数据可以从不同的行开始。
我怀疑我的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 - 是范围的名称。
【问题讨论】:
-
看来,我必须使用 .row+2 才能做到这一点 - 但为什么?!为什么它只在这个特定的工作表上解决这个问题?! - 我一定在这里遗漏了一些东西 - 有什么想法吗?!非常感谢所有的支持者!
-
使用
.UsedRange时要小心 - 请参阅 stackoverflow.com/questions/7423022/… 以及可能的其他一些 SO 线程 -
我认为您没有从 UsedRange 获得预期的效果。它不会像您预期的那样返回最后一行。你想瞄准什么?
-
重点是,我不是想得到最后一行。我只关心开始,当我在调试下检查时,UsedRange 提供了我所期望的。我想使用它,这样我就不必指定我的数据集有多宽或多长,所以我很容易适应。
-
Excel 处理单元格引用的方式有些奇怪。您知道粘贴公式时它如何自动更改单元格之间的引用吗?嗯,它正在这样做,但参考是很远的。这发生在第一次运行之后。打开工作簿,设置测试页面,运行代码......它可以工作。再做一次它会失败一点。再做一次,它会失败更多。去挑选它,看看我能不能把它分类。
标签: vba excel conditional-formatting