如果过滤后有任何结果,我想将自动过滤范围复制并粘贴到新工作表,如果没有结果则显示消息框。
但是,当我使用不会返回任何结果的过滤条件进行测试时,不会出现消息框(空白工作表显示)
tools:node="replace"
答案 0 :(得分:1)
首先,您希望在活动工作表中工作,但是当您执行Worksheets.Add时,添加的工作表可以成为活动工作表(取决于我认为的Excel版本)。这可能是一个问题。所以你必须设置一个WSOld并对其进行处理。
此外,您的自动过滤功能的顺序不正确(首先声明Worksheet.Range(firstColumfirstLine:lastColumLastLine),然后在其上自动过滤:https://msdn.microsoft.com/fr-fr/library/office/ff193884.aspx)。
您还必须选择过滤数据的条件。
然后使用UsedRange.SpecialCells(xlCellTypeVisible)设置过滤单元格的范围并在其上进行交互。
这对我有用:
Dim WSOld As Worksheet
Dim WSNew As Worksheet
'store the active sheet in WSOld to be sure that selection will be apply on it
Set WSOld = ActiveSheet
Set WSNew = Worksheets.Add
'select the range to apply the filter and choose criteria
WSOld.Range("A1:B6500").AutoFilter Field:=2, Criteria1:="te"
'select the data visible after filter
Dim rngVisible As Range
Set rngVisible = WSOld.UsedRange.SpecialCells(xlCellTypeVisible)
If rngVisible.Rows.Count > 1 Or rngVisible.Areas.Count > 1 Then
rngVisible.Copy
With WSNew
.Range("A1").PasteSpecial Paste:=8
.Range("A1").PasteSpecial xlPasteValues
.Range("A1").PasteSpecial xlPasteFormats
Application.CutCopyMode = False
.Select
End With
Else
MsgBox ("No such filtered criteria")
End If
'remove autofilter
WSOld.Range("A1:B6500").AutoFilter
希望它有所帮助。
答案 1 :(得分:1)
请检查:
Option Explicit
Sub Filter_range()
Dim WSNew As Worksheet
Dim rngVisible As Range
Set rngVisible = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
If rngVisible.Rows.Count > 1 Or rngVisible.Areas.Count > 1 Then
rngVisible.Copy
Set WSNew = Worksheets.Add
With WSNew.Range("A1")
.PasteSpecial Paste:=8
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
.Select
End With
Else
MsgBox ("No such filtered criteria")
End If
End Sub