【问题标题】:Adding msgbox if my pivot table has empty cells如果我的数据透视表有空单元格,则添加 msgbox
【发布时间】:2020-05-11 07:37:07
【问题描述】:

enter image description here我有一个运行宏的 Excel 工作簿,最后在数据透视表中显示所有内容

当我的数据透视表有一个空单元格时(在我的宏末尾),我正在尝试添加一个 msgbox 我已经做了条件格式版本(空白单元格颜色为红色),它工作正常,但客户想要一个 msgbox 来提醒他。

我找到了一个应该可以工作的 IsEmpty 命令,但我似乎无法让它只在所述数据透视表中显示。 这是我尝试过的:

Sub IsEmpty()

If IsEmpty(ActiveSheet.Range("PivotTables(1)")) = True Then
    'Cell A2 is not blank
   MsgBox "Cell A2 is empty"
Else

End If
End Sub

我确定我的 If 语句的编写方式是错误的。只是似乎找不到正确的语法。

提前致谢

图片已添加;我希望宏以枢轴的 C 列为目标。但是,您无法知道哪个单元格将为空或列表将持续多长时间。 如果只是让 Excel 进行广泛的检查(c2:c300),在数据透视表完成后总会有一个空单元格。 您可能会创建一个循环,但它超出了我目前的技能。

数据透视表的名称是“PivotTable2”

是否只在数据透视表的 c 列中搜索空单元格?

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    请考虑以下函数的功能。它将根据 A 和 C 列中的项目数返回 True 或 False。在 A 列中,对文本、数字或函数进行计数。在 C 列中,每个单元格中必须有一个数字。如果两个计数相同,则函数返回 True。如果存在当前函数未更正评估的异常,则可以进一步细化任一计数。

    Function IsComplete() As Boolean
        ' 025
    
        Dim Rng As Range
    
        With ThisWorkbook.Sheets("PivotTables(1)")      ' change to suit
            ' set a range from A3 to end of column A
            Set Rng = .Range(.Cells(3, "A"), .Cells(.Rows.Count, "A").End(xlUp))
        End With
    
        With Application.WorksheetFunction
            IsComplete = (.CountA(Rng) = .Count(Rng.Offset(0, 2)))
        End With
    End Function
    

    您可以使用代码调用此函数并在函数返回 False 时显示一个消息框和另一个。代码可以连接到工作表中任何位置的工作表按钮。

    Sub CommandButton1_Click()
    
        Dim Txt As String
    
        If IsComplete Then
            Txt = "The pivot table was created without mistakes."
        Else
            Txt = "Some data are missing in the pivot table."
        End If
    
        MsgBox Txt, vbInformation, "Action report"
    End Sub
    

    您还可以将该函数作为 UDF 调用,并在工作簿中任何工作表的单元格中显示 True 或 False。 UDF 调用类似于=IsComplete()。您还可以在 IF 条件中嵌入 UDF 调用,并在工作表上显示另一个文本。

    =IF(IsComplete(),"All's well","Missing Item")
    

    实际上,您可以稍微修改函数以返回一个计数与另一个计数之间的差值并显示“1 item missing”。可能性是无穷无尽的,因为它的功能是如此多才多艺。

    【讨论】:

    • 感谢您的意见。忘了提,我想搜索整个 C 列,但是如果我将“A2”更改为“A”,它会显示:应用程序定义的或对象定义的错误。有什么想法吗?
    • 当然。一列中有超过 140 万个单元格。其中一些将是空白的机会是压倒性的。因此,该测试可能没有任何用处。尝试使用 COUNTA() 来测试该列是否包含您需要的多个条目。
    • 上传数据的“按需输入”的问题发生了变化,这意味着范围也发生了变化,我又回到了同样的问题。我只需要查看数据透视表。这是动态的。我希望这是有道理的:)我只是觉得如果只有一种方法可以在数据透视表中搜索(只有一个),那么编码会容易得多。
    • 如果您知道其名称,则可以在数据透视表中定义一个范围。如果您知道它们的地址,则可以检查该工作表中的某些单元格是否为空。我建议您张贴您的数据透视表的图片并指出您要检查的单元格。如果您无法确定它们,请描述它们可能改变的方式。您可以通过编辑问题来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多