Excel 宏检查单元格是否为空并在列中搜索特定单词

Excel Macro check if cell is empty and search specific word in column

伙计,我是 VBA 语言的初学者,我有一个问题要解决。

如何制作一个宏脚本来检查 B 列的 ANY 行是否是“C”的输入词 AND ANY 行C列为空,则触发用颜色高亮显示该行,并弹出消息框提醒用户更正。

另外,D列正在使用公式和逐个单元格的方法来检查上述要求。

=IF(ISBLANK(B4),"",IF(OR(B4="C",B4="O"),IF(AND(B4="C", ISBLANK(C4)),"WARNING: Case Closed! Please Write Down Resolution!",""),"ERROR: Invalid Value - Status! Please Input The Right Value!"))

例如第 4 行符合要求并受到影响。

有办法吗? 请帮忙。谢谢。


更新:感谢 Variatus!

当我保存文件时,它会弹出这个消息框。我能做些什么?谢谢。

微距画面

错误

在正常情况下,你会被要求更多地表现出自己的努力,然后才能得到本论坛的帮助,包括来自我的帮助。但显然情况不正常。所以,我们开始吧。将此过程粘贴到标准代码模块(默认情况下,它的名称将是 Module1 的变体)。

Option Explicit

Sub MarkErrors()
    ' 283
    
    Dim Spike()         As String
    Dim i               As Long                 ' index of Spike
    Dim Rl              As Long                 ' last used row
    Dim R               As Long                 ' loop counter: rows

    Application.ScreenUpdating = False
    With Sheet1                                 ' this is the sheet's CodeName (change to suit)
        .UsedRange.Interior.Pattern = xlNone    ' remove all existing highlights
        Rl = .Cells(.Rows.Count, "A").End(xlUp).Row
        ReDim Spike(1 To Rl)
        For R = 2 To Rl
            If Trim(.Cells(R, "B").Value) = "C" Then
                If IsEmpty(.Cells(R, "C")) Then
                    .Range(.Cells(R, "A"), .Cells(R, "D")).Interior.Color = vbYellow
                    i = i + 1
                    Spike(i) = "Row " & R
                End If
            End If
        Next R
    End With
    Application.ScreenUpdating = True
    
    If i Then
        ReDim Preserve Spike(1 To i)
        MsgBox "Status errors were found in the following entries:-" & vbCr & _
               Join(Spike, "," & vbCr), vbInformation, "Corrections required"
    End If
End Sub

关注指定作业sheetSheet1。这是一个 CodeName,并且是默认值。 Excel 将在您创建工作簿时使用该名称创建一个 sheet。当用户更改选项卡名称时,CodeName 不会更改,但您可以在 VB 编辑器中更改它。是作品的(Name)属性sheet.

Sheet1 的代码 sheet 中安装以下程序(不是标准代码模块,因此与安装上述代码的位置不同。此模块由 Excel 每个工作簿中的每个 sheet。使用现有的。

Private Sub Worksheet_Activate()
    ' 283
    MarkErrors
End Sub

这是一个事件过程。只要 Sheet1 被激活(选择),它就会自动 运行。因此,在正常情况下,您永远不需要手动 运行 第一个过程。但我已经谈到了情况。他们并不总是正常的。 :-)