Как сделать так, чтобы это не повторялось? - PullRequest
0 голосов
/ 06 января 2020
Код

, приведенный ниже, выполняет поиск по имени c в элементах фильтра сводной таблицы и фильтрует по этому имени, если он найден. затем меняет column1 на это имя и вызывает другой метод. он делает это для 6 имен, которые всегда будут одинаковыми. как мне ограничить повторяемость? это должно быть сделано иначе?


For Each pvtitem In ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").PivotItems
   If pvtitem.Name = "BUN" Then
   ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").CurrentPage _
        = "BUN"
    Column1 = "AA"
    Call Brand(Range1, Column1)
    Exit For
   End If
   Next


   For Each pvtitem In ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").PivotItems
   If pvtitem.Name = "CAX" Then
   ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").CurrentPage _
        = "CAX"
      Column1 = "AQ"
    Call Brand(Range1, Column1)
    Exit For
   End If
   Next

   For Each pvtitem In ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").PivotItems
   If pvtitem.Name = "CNF" Then
   ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").CurrentPage _
        = "CNF"
      Column1 = "BG"
    Call Brand(Range1, Column1)
    Exit For
   End If
   Next

   For Each pvtitem In ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").PivotItems
   If pvtitem.Name = "CVN" Then
   ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").CurrentPage _
        = "CVN"
      Column1 = "BW"
    Call Brand(Range1, Column1)
    Exit For
   End If
   Next

   For Each pvtitem In ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").PivotItems
   If pvtitem.Name = "GMN" Then
   ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").CurrentPage _
        = "GMN"
      Column1 = "DS"
    Call Brand(Range1, Column1)
    Exit For
   End If
   Next

   For Each pvtitem In ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").PivotItems
   If pvtitem.Name = "XCD" Then
   ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").CurrentPage _
        = "XCD"
      Column1 = "EY"
    Call Brand(Range1, Column1)
    Exit For
   End If
   Next

Ответы [ 2 ]

3 голосов
/ 06 января 2020

Это идеальный пример использования Select Case:

Sub tgr()

    Dim pvtitem As PivotItem
    Dim Range1 As Range
    Dim Column1 As String

    'Set Range1 = <your range>
    'If necessary, you can set this as part of the select case along with Column1

    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code")
        For Each pvtitem In .PivotItems
            Column1 = vbNullString
            Select Case UCase(pvtitem.Name)
                Case "BUN": Column1 = "AA"
                Case "CAX": Column1 = "AQ"
                Case "CNF": Column1 = "BG"
                Case "CVN": Column1 = "BW"
                Case "GMN": Column1 = "DS"
                Case "XCD": Column1 = "EY"
            End Select
            If Len(Column1) > 0 Then
                .CurrentPage = pvtitem.Name
                Call Brand(Range1, Column1)
            End If
        Next pvtitem
    End With

End Sub
1 голос
/ 06 января 2020

Я бы, наверное, сделал это следующим образом:

workitems = Array("BUN-AA","CAX-AQ","CNF-BG","CVN-BW","GMN-BS","XCD-EY")
For Each workitem In workitems
    nm = Split(workitem, "-")(0)
    clm = Split(workitem, "-")(1)
    For Each pvtitem In ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").PivotItems
        If pvtitem.Name = nm Then
            ActiveSheet.PivotTables("PivotTable1").PivotFields("Client Code").CurrentPage _
            = nm
            Column1 = clm
            Call Brand(Range1, Column1)
            Exit For
        End If
    Next
Next

Позже его легко развернуть, просто добавив больше рабочих элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...