vba SpecialCells (xlCellTypeVisible) работает неправильно при циклическом просмотре сводных элементов в фильтре - PullRequest
0 голосов
/ 08 января 2019

Я использую приведенный ниже код для циклического перемещения по элементам фильтра в сводной таблице, а затем копирую отфильтрованные результаты.

Но по какой-то причине в коде не учитываются элементы, которые не имеют результатов, и вместо этого, похоже, вместо этого копируются предыдущие результаты.

У меня есть обработка ошибок в коде для элементов, которые не показывают результатов, но, похоже, это не работает - при просмотре кода он пропускает «если», которое я поместил, чтобы поймать «ничего» .

Затем (когда он попадает в часть кода для копирования / вставки) копируются (теперь скрытые) ячейки, которые были видны под последним элементом, выбранным в фильтре в предыдущем цикле.

Я пропустил конец кода, так как он становится немного длинным и все работает, это всего лишь бит с видимыми ячейками, которые я не могу заставить работать.

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 голосов
/ 09 января 2019

При попытке установить rng, если нет видимых ячеек, назначение не выполняется, и он переходит к следующей строке кода. Этот процесс не устанавливает для rng ничего. Он просто ничего не делает, в результате чего rng ​​остается со значением, которое было у него при последнем запуске цикла.

Самое простое решение - заставить rng быть ничем, прежде чем пытаться присвоить его видимым ячейкам. Таким образом, если назначение не выполнено, вы успешно обнаружите сбой при проверке на rng = none:

Range("Filters").AutoFilter Field:=2, Criteria1:=Array("false"), Operator:=xlFilterValues 'No need for a With block if you're only performing 1 method

set rng = Nothing 'Clear the rng variable before trying to assign a new range to it
On Error Resume Next
Set rng = Worksheets("By User").Range("Bulletin_List").SpecialCells(xlCellTypeVisible)
On Error Goto 0 'Restore normal On Error behaviour to trap any other unexpected errors
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...