【问题标题】:Display message if empty cells exist in column如果列中存在空单元格,则显示消息
【发布时间】:2019-05-24 05:23:18
【问题描述】:

我有一个基于其他工作表编译的主(主)表。将所有其他工作表复制到主工作表后,我需要运行一个代码,该代码将特别评估 1 列,并且我需要显示一条文本消息,说“嘿,你在所述列中有空单元格”。我的问题是该列总是有不同数量的行,所以我不能硬编码范围。 我也不关心空单元格的数量,而只是 1 条消息说你有空单元格就足够了。

我尝试了下面的代码,目的是在我的列 F 中找到活动范围,然后如果为空则显示消息但什么也没有。

Dim ABC22 As Long
With ActiveSheet
    ABC22 = .Cells(.Rows.Count, "F").End(xlUp).Row
    If IsEmpty("ABC22") = True Then
        MsgBox "Posting Key Column (F) contains empty cells"
    End If
End With

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    有多种方法可以做到这一点,这是一种:

    Sub Test()
        With ActiveSheet
            Dim lastRow As Long
            lastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
    
            If WorksheetFunction.CountBlank(.Range("F1:F" & lastRow)) > 0 Then
                MsgBox "Posting Key Column (F) contains empty cells"
            End If
        End With
    End Sub
    

    【讨论】:

    • 即使我没有任何空单元格,它仍然显示消息。我怀疑这可能是因为它正在检查整个 F 列,而不仅仅是 F 列中的活动行。
    【解决方案2】:

    可以用Evaluate和两个Ctrl + Up来简化:

    If [CountA(F:F)=0] Or Cells(Rows.Count, "F").End(xlUp).End(xlUp).Row > 1 Then
    

    CountA(F:F) 检查列是否完全为空,两个 Ctrl + Up 检查最后一个非空单元格之前是否有空单元格。


    附带说明,Cells 指的是活动工作表,因此With ActiveSheet 可以被删除或替换为特定工作表:

    With Sheet("Sheet name")
        If .Evaluate("CountA(F:F)=0") Or .Cells(.Rows.Count, "F").End(xlUp).End(xlUp).Row > 1 Then
    

    【讨论】:

    • @BigBen 谢谢,你是对的。我不知道为什么我认为里面总会有一些数据。
    【解决方案3】:

    计算特殊单元格。

        Sub CountBlanks()
        lastRow = Cells(Rows.Count, 6).End(xlUp).Row
    
        On Error GoTo ErrorHandler
        bCells = Range("F1:F" & lastRow).SpecialCells(xlCellTypeBlanks).Count
        MsgBox "There are " & bCells & " blank cells."
        Exit Sub
    
        ErrorHandler:
            MsgBox "There are no blank cells"
        End Sub
    

    【讨论】:

    • 如果您有一列不包含任何空白单元格以建立最后一行,则此方法效果最佳。
    • 您不是要使用 F 列来确定 lastRow,而不是 A 列吗?
    • 当它找到一个空单元格时,它可以正常工作。但如果没有空单元格,则会出错。
    • @BigBen,我以为他可以自己调整列引用,但我理解您的评论,所以我更改了引用。我不认为将同一列与空白单元格一起使用是建立最后一行的最佳解决方案,因为如果最后一行是空白单元格,则不会在此示例中计算在内。 Todd Cee,你是对的,我为没有空白单元格的时间添加了一个错误处理程序。
    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多