如何验证GROUP中的WorkSheets是空的还是不包含数据?

时间:2014-01-21 06:42:40

标签: excel vba excel-vba

我想找到一种方法来检查工作表组中的任何工作表是否为空或包含数据。

我尝试过使用它,但似乎没有用。

.Sheets(Array("1", "2", "3", "4", "5", "6", "7", "8", "9")).select
If WorksheetFunction.CountA(Selection.UsedRange.Cells) = 0 Then 
  MsgBox "All Sheets empty!"
  Exit Sub
End If

2 个答案:

答案 0 :(得分:1)

由于某种原因,如果我只使用“单元格”,我可以检查工作表是否为空。不知道为什么这不起作用,因为它没有引用任何分组表。如果其他工作簿也开放,可能会失败。

Sub SheetsEmpty()
With ThisWorkbook
    ' check if sheets are empty.
    .Sheets(Array("1", "2", "3", "4", "5", "6", "7", "8", "9")).Select
    If WorksheetFunction.CountA(Cells) = 0 Then Exit Sub
End With
End Sub

如果我在监视窗口中向此“WorksheetFunction.CountA(Cells)”添加一个Watch,它只显示一个非空单元格,而不是所有9个单元格。我猜这是因为床单被分组了。

关于这种行为的任何想法?

答案 1 :(得分:1)

有两种可能性:

如果纸张“1”到“9”相邻而中间没有其他纸张,请使用:

Sub Demo1()
    With ThisWorkbook
        If Evaluate("=COUNTA('[" & .Name & "]1:9'!1:" & .Worksheets("1").Rows.Count & ")") = 0 Then
            MsgBox "All Sheets empty!"
        Else
            MsgBox "All Sheets NOT empty!"
        End If
    End With
End Sub

如果纸张“1”至“9”不相邻,或其间有其他纸张,请使用:
(或者只是使用这个版本)

Sub Demo2()
    Dim ws As Worksheet
    Dim tot As Long
    For Each ws In ThisWorkbook.Worksheets(Array("1", "2", "3", "4", "5", "6", "7", "8", "9"))
        tot = tot + WorksheetFunction.CountA(ws.Cells)
    Next
    If tot = 0 Then
        MsgBox "All Sheets empty!"
    Else
        MsgBox "All Sheets NOT empty!"
    End If
End Sub