以下代码用于格式化单元格
如果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的值与数组中的第二个元素进行比较。如果设备类型匹配且内容为否,则格式化正常。问题是当内容为“否”且设备类型不匹配时,列中的所有单元格都会丢失其格式。例如:
但是当我到达10时,我在单元格中输入“No”但现在前一个单元格“ubuntu”的值与数组的位置1的值不匹配,所以我希望该单元格不具有粉红色的背景,但是当我输入“No”时,所有以前的单元格都会松开背景:
我不知道我的问题是说明(rng As Range)
还是我设置条件格式规则的方式。想法?
答案 0 :(得分:0)
如果sshProblem在常规模块中,则默认情况下任何Cells / Range将引用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