vba - 条件格式 - 如何引用单元格本身?
问题描述
我试图编写 VBA 代码来设置列的条件格式,以便当单元格包含小写和大写字母的混合时,用黄色填充单元格。列号将由变量 c 确定。最后行号将由变量 last_row 确定。
以下代码未按预期工作。看起来 LCase(xlCellValue) 总是返回“1”而不是小写格式的单元格内容。因此条件变为“CellValue <> 1”,它没有做我想要做的事情。
c = 1
last_row = 10
Range(Cells(1, c), Cells(last_row, c)). _
FormatConditions.Add(xlCellValue, xlNotEqual, LCase(xlCellValue)). _
Interior.ColorIndex = 6
所以我想我将不得不使用 xlExpression 而不是 xlCellValue。但是我应该如何编写公式以便它包含变量 c 和 last_row?谢谢!
解决方案
在这里,试试这个:
Sub test()
c = 1
last_row = 10
Range(Cells(1, c), Cells(last_row, c)). _
FormatConditions.Add(xlExpression, , "=NOT(Exact(" & Cells(1, c).Address(RowAbsolute:=False) & ",Lower(" & Cells(1, c).Address(RowAbsolute:=False) & ")))"). _
Interior.ColorIndex = 6
End Sub
我不知道与的比较xlCellValue, xlNotEqual
是否区分大小写;但是,Excel 有一个Exact
区分大小写的比较功能。当字符串不是全部小写时,我添加了一个Not
以使公式的返回为真。由于这是使用 Excel 函数设置的,因此我也将其替换为.Lcase
Lower
笔记:
使用您遵循的逻辑,如果整个字符串是大写的,它也会变成黄色。如果您只想在混合情况下进行调节,则应改用以下代码:
Sub test()
c = 1
last_row = 10
Range(Cells(1, c), Cells(last_row, c)). _
FormatConditions.Add(xlExpression, , "=NOT(OR(Exact(" & Cells(1, c).Address(RowAbsolute:=False) & ",Lower(" & Cells(1, c).Address(RowAbsolute:=False) & ")),Exact(" & Cells(1, c).Address(RowAbsolute:=False) & ",Upper(" & Cells(1, c).Address(RowAbsolute:=False) & "))))"). _
Interior.ColorIndex = 6
End Sub
推荐阅读
- python - 从记事本导入数据时如何解决“索引错误:数组索引过多”
- javascript - 在未来的设定日期执行 Javascript 函数
- java - 休眠保留关键字转义不起作用
- bash - 如何使用 ssh 在远程服务器中运行功能并期望?
- user-interface - 为什么这个 FAB 不更新状态?
- javascript - Angular 9 - 无法绑定到“formGroup”,因为它不是“form”的已知属性
- node.js - 如何将文档嵌套到其他文档中
- angular - 如何禁用prime ng下拉列表中的特定选择项?
- java - 有没有更好的方法来编写代码来查找 3 位数字的回文?
- c# - 如何确定一个程序集是针对 .net 核心、.net 框架还是 .net 标准构建的?