我试图创建一个检查B列颜色的if语句。
如果我在B栏中定位单个单元格而不是在我尝试时(" B:B"),它会起作用。
这就是我所拥有的。
Sub FOO()
Dim answer As Range
Set answer = Range("b:b")
If answer.Interior.Color = vbRed Then
MsgBox ("There is an issue with column B, please review.")
End If
End Sub
答案 0 :(得分:2)
由于我们获得了许多质量答案,因此这里是最优化的代码。最快,我打赌:)
如果您使用的是excel的古老版本之一,它将无法工作。 2007 +的任何事都没问题。
UPDATE DB2.paperworks
SET DB2.paperworks.contact_id = (
SELECT MAX(DB1.contacts.code)
FROM DB1.contacts
WHERE DB2.paperworks.name = DB1.contacts.name
)
旧答案
Sub OptimizedFOO()
Dim rngTemp
With Application.FindFormat.Interior
.Color = vbRed
End With
'/ Sheet1 is example sheet name
Set rngTemp = Sheet1.Columns(2).Find(What:="", SearchFormat:=True)
If Not rngTemp Is Nothing Then
MsgBox ("There is an issue with column B, please review.")
End If
End Sub
答案 1 :(得分:1)
我不确定,但请给我最好的猜测。
如果VB统一属性,则它统一列的所有单元格的属性。然后,您可以将该属性与值进行比较,如果所有的属性都具有相同的值,则该值将为True。否则比较将为False。
如果所有单元格都具有此值If answer.Interior.Color = vbRed
,则vbRed
将为True。如果要检查任何单元格是否具有该颜色,则可能需要遍历所有单元格。
我相信VB和VB对象模型的工作原理如下,但我不确定。
答案 2 :(得分:0)
我会在B列上找到最后使用的行,而不是循环遍历它们。
Sub FOO()
Dim LR As Long, I As Long
LR = findLastRow("Sheet1", "B")
For I = 1 To LR
If Range("B" & I).Interior.Color = vbRed Then
MsgBox ("There is an issue with column B, please review.")
Exit For
End If
Next I
End Sub
Function findLastRow(shtName As String, colLetter As String) As Long
With Sheets(shtName)
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
findLastRow = .Cells.Find(What:="*", _
After:=.Range(colLetter & "1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
findLastRow = 1
End If
End With
End Function
答案 3 :(得分:0)
您可以使用自动过滤器执行某些操作,例如
Function AnyRedCells(rngRangeToInspect As Excel.Range) As Boolean
Application.ScreenUpdating = False
rngRangeToInspect.AutoFilter
rngRangeToInspect.AutoFilter field:=1, Criteria1:=RGB(255, 0, 0), Operator:=xlFilterCellColor
' Using >1 as assuming header on column
AnyRedCells = (ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Cells.Count > 1)
rngRangeToInspect.AutoFilter
Application.ScreenUpdating = True
End Function
像这样使用
Sub OptimizedFOO2()
If AnyRedCells(Range("b23:b26")) Then
MsgBox ("There is an issue with column B, please review.")
End If
End Sub