Excel VBA - IF自动过滤器不包含任何记录,MsgBox

时间:2016-12-06 05:34:04

标签: excel vba

我正在尝试过滤特定条件,在这种情况下任何类似-SERVICE CODE 我在列名称中过滤此内容,而不是由A:A表示的列。代码的第一部分工作正常,If语句是我遇到问题的地方。我创建了If语句,如果有针对-SERVICE CODE过滤器显示的实际数据行,则可以执行某些操作,在这种情况下,它应显示" Data"如果至少有一行被过滤,问题是它显示了"数据"即使过滤时没有显示任何内容,也会显示消息。

我正在试图找出当没有任何东西与过滤条件匹配时如何正确显示无数据消息。

谢谢,

Sub Filter results()

Dim rng As Range, res As Variant

Set rng = ActiveSheet.AutoFilter.Range.Rows(1)
res = Application.Match("Errors", rng, 0)
rng.AutoFilter Field:=res, Criteria1:="*-SERVICE CODE*"

If rng.SpecialCells(xlCellTypeVisible).Count > 1 Then
   MsgBox "Data"
Else
   MsgBox "No Data"
End If

End Sub()

2 个答案:

答案 0 :(得分:1)

您可以使用<div id="map"></div>来测试已过滤的单元格数,并检查列中是否有多个(标题始终被过滤)

就像你的代码的重构一样

Application.WorksheetFunction.Subtotal(103, rng.Resize(, 1))

答案 1 :(得分:1)

使用您的代码,我定义了您使用范围的最后一行(假设A列中始终有数据,如果没有则更改为另一列),因为最后一行之外的任何单元格都将显示为可见。然后,可见计数仅在该列上执行,直到最后一行。

Sub FilterResults()

Dim rng As Range, res As Variant, lrow As Long

Set rng = ActiveSheet.AutoFilter.Range.Rows(1)
res = Application.Match("Errors", rng, 0)
rng.AutoFilter Field:=res, Criteria1:="*-SERVICE CODE*"

lrow = ActiveSheet.Cells(Rows.Count, res).End(xlUp).Row + 1

If ActiveSheet.Range(Cells(1, res), Cells(lrow, res)).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
   MsgBox "Data"
Else
   MsgBox "No Data"
End If

End Sub