[英]Conditional Formatting Applying to a range instead of the individual cell
以下代码旨在格式化单元格
如果sshDevices
数组中列出了同一行和之前的某些列中的单元格的值
Function sshProblem(rng As Range) As Boolean Dim portStatus As String portStatus = rng.Value Dim deviceType As String deviceType = Cells(ActiveCell.Row, 3).Value Dim sshDevices As Variant sshDevices = Array("linux", "vmw", "docker", "unix") If StrComp(portStatus, "No") = 0 Then If StrComp(deviceType, sshDevices(1)) = 0 Then sshProblem = True End If End If End Function
现在,我只是将deviceType的值与数组中的第二个元素进行比较。 如果设备类型匹配且内容为No,则格式化工作正常。问题是,当内容为No并且设备类型不匹配时,列中的所有单元格都将释放其格式。 例如:
我在第8行中输入“否”,并且该单元格的格式正确,并带有粉红色背景:
但是当我达到10时,我在单元格中输入了“否”,但是现在以前的单元格“ ubuntu”的值与数组位置1的值不匹配,因此我希望该单元格没有粉红色的背景,但是,当我输入“否”时,所有先前的单元格都会失去其背景:
我不知道我的问题是(rng As Range)
还是设置条件格式设置规则的方式。 有想法吗?
如果sshProblem在常规模块中,则默认情况下,任何单元格/范围都将引用ActiveSheet,而不一定是您从中调用函数的工作表。
另外, ActiveCell
在这里没有用-如果您要引用从中调用公式的单元格,请使用Application.Caller
最后,您可以使用Application.Match
来测试数组中是否包含值。
Function sshProblem(rng As Range) As Boolean
Dim portStatus As String, sht As WorkSheet
Dim rw as Long
Set sht = rng.WorkSheet
portStatus = rng.Value
Dim deviceType As String
rw = Application.Caller.Row
deviceType = sht.Cells(rw, 3).Value
Dim sshDevices As Variant
sshDevices = Array("linux", "vmw", "docker", "unix")
If StrComp(portStatus, "No") = 0 Then
sshProblem = Not IsError(Application.Match(deviceType, sshDevices, 0))
End If
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.