Выход из цикла выбора слайсера - PullRequest
0 голосов
/ 12 марта 2019

не нашел никакого ответа в сети, поэтому мы идем:

Я пытаюсь найти способ выйти из оператора if до того, как будет выполнен подсчет i для слайсеров.

Допустим, у меня есть 2 слайсера: а) страна и б) регионы.Когда выбрана страна, можно выбрать только несколько регионов, которые я затем экспортирую по одному.

[...]
With ActiveWorkbook.SlicerCaches("Slicer_Region")
     '[.... something with i=1 which is different]
     For i = 2 To .SlicerItems.Count
            If Cells(41, 3).Value <> "" Then
                .SlicerItems(i).Selected = True
                .SlicerItems(i - 1).Selected = False
                Name = .SlicerItems(i).Name
                strFName = "Region " & Name & ".pdf"
                ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                strPath & strFName, Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
            'Else:
            '    End If
            '    GoTo goout
            End If
        Next i
'goout:
End With 
[...] 

Условие If Cells(41, 3).Value <> "" проверяет наличие данных в сводной таблице - это будетпервый ряд с данными.Тем самым я избегаю экспорта пустых регионов.Тем не менее, цикл все равно будет продолжаться для каждого региона, даже если это невозможно (не в стране, которая уже выбрана).

Как только появится один «пустой регион», все последующие будут пустыми какхорошо (поскольку слайсеры показывают заполненные в первую очередь).Поэтому, как только условие переходит в пустое Cells(41, 3).Value <> "", я бы хотел, чтобы оно вышло из цикла, потому что оно просто занимает время впустую.

Я не знаю, как это сделать, то, как это здесь в коде, выдает мне ошибку: «endif без блока if» - что имеет смысл

1 Ответ

2 голосов
/ 12 марта 2019

Это не так, но не желательно:

With ActiveWorkbook.SlicerCaches("Slicer_Region")
 '[.... something with i=1 which is different]
 For i = 2 To .SlicerItems.Count
        If Cells(41, 3).Value <> "" Then
            .SlicerItems(i).Selected = True
            .SlicerItems(i - 1).Selected = False
            Name = .SlicerItems(i).Name
            strFName = "Region " & Name & ".pdf"
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            strPath & strFName, Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
        Else
            GoTo goout
        End If
    Next i
goout:
End With 

Вместо этого используйте оператор Exit For.Как правило, вы хотели бы избежать линейных меток

'[..]
        Else
            Exit For
        End If
    Next i
End With 
...