遍历过滤器中的枢轴项时,vba SpecialCells(xlCellTypeVisible)无法正常工作

时间:2019-01-08 16:10:33

标签: excel vba

我正在使用以下代码在数据透视表的过滤器中循环浏览各个项目,然后复制过滤后的结果。

但是由于某些原因,代码无法解释没有结果的项目,而是代替了先前的结果。

我对项目的代码中有错误处理,这些项目将不会显示任何结果,但似乎不起作用-在遍历代码时,它会跳过我放置在其中的“ if”以捕获“无”

然后(当到达代码的复制/粘贴部分时)复制上一个循环中在过滤器中选择的最后一项下可见的(现已隐藏)单元格。

我错过了代码的结尾,因为它有点冗长,并且可以正常工作,只是可见单元格的一点点,我似乎无法正常工作。

Sub Bulletin_Chase()

Dim pt As PivotTable
Dim pi As PivotItem
Set pt = Worksheets("By User").PivotTables("PivotTable1")

Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String

For Each pi In pt.PageFields("Supplier").PivotItems
  pt.PageFields("Supplier").CurrentPage = pi.Name

With Range("Filters")
    .AutoFilter Field:=2, Criteria1:=Array("false"), Operator:=xlFilterValues
End With

On Error Resume Next
Set rng = Worksheets("By User").Range("Bulletin_List").SpecialCells(xlCellTypeVisible)

If rng Is Nothing Then
    Worksheets("By User").AutoFilterMode = False
    Range("Filters").AutoFilter
    GoTo Continue
End If

等...

真的为此感到挣扎,所以非常感谢您的才华。

1 个答案:

答案 0 :(得分:0)

尝试设置rng时,如果没有可见的单元格,则分配失败,并跳至下一行代码。此过程不会将rng设置为Nothing。它只是不执行任何操作,而使rng保留上一次循环运行时的值。

最简单的解决方案是在尝试将rng分配给可见单元之前将其强制为空。这样,如果分配失败,则在测试rng = none时将成功检测到失败:

right: 10px;