我想找到一种方法来检查工作表组中的任何工作表是否为空或包含数据。
我尝试过使用它,但似乎没有用。
.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
答案 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