Кнопка макроса работает только при втором нажатии - PullRequest
0 голосов
/ 24 апреля 2019

Итак, я создал сводную таблицу и кнопки для нее.Каждая кнопка представляет поле, которое войдет в часть значений сводной таблицы.Каждое из этих полей - это годы 2016, 2017, 2018 и 2019. Я также создал кнопку для одновременного представления всех лет.Я также применяю слайсер для других полей и фильтров.- для фильтра я бы просто скопировал сводную таблицу и поместил выбранное поле на вкладку фильтра сводной таблицы.(Надеюсь, это имеет смысл)

Я хочу знать, почему, когда я впервые запускаю Excel.Ни одна из кнопок не работает.Это работает, только если я нажимаю на кнопку «Весь год» во второй раз, то есть в первый раз он говорит, что объект не найден.Но во второй раз, когда я нажал на него, он будет работать как обычно.Все остальные кнопки тоже будут работать.

Эта проблема возникает после того, как я добавил фильтр для слайсеров.

Sub Add_Value_MasterCode()

Dim pt As PivotTable
Dim pf As PivotField
Dim SField As String

'Set Variable
 Set pt = ActiveSheet.PivotTables(1)
 SField = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text


'Remove Existing Fields
For Each pf In pt.DataFields
If pf.Name <> "Values" Then
    pf.Orientation = xlHidden
End If
Next pf

'Add fields that button was clicked for
pt.PivotFields(SField).Orientation = xlDataField

'Set title and color for each fields
ActiveSheet.ChartObjects("Chart 1").Chart.ChartTitle.Text = SField & " Revenue"
ActiveSheet.PivotTables("PivotTable1").PivotFields("Sum of " & SField).Caption = "Year " & SField
If SField = "2016" Then
    Call year2016
ElseIf SField = "2017" Then
    Call year2017
ElseIf SField = "2018" Then
    Call year2018
ElseIf SField = "2019" Then
    Call year2019
End If

End Sub

Это другой код.

Sub Add_All()


Dim pt As PivotTable
Dim pf As PivotField
Dim SField As String

'Set Variable
Set pt = ActiveSheet.PivotTables(1)
SField = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text

'Remove Existing Fields
For Each pf In pt.DataFields
If pf.Name <> "Values" Then
    pf.Orientation = xlHidden
End If
Next pf

With ActiveSheet.PivotTables("pivottable1")
            .AddDataField ActiveSheet.PivotTables("PivotTable1").PivotFields("2016"), "Year 2016", xlSum
            .AddDataField ActiveSheet.PivotTables("PivotTable1").PivotFields("2017"), "Year 2017", xlSum
            .AddDataField ActiveSheet.PivotTables("PivotTable1").PivotFields("2018"), "Year 2018", xlSum
            .AddDataField ActiveSheet.PivotTables("PivotTable1").PivotFields("2019"), "Year 2019", xlSum
End With


ActiveSheet.ChartObjects("Chart 1").Chart.ChartTitle.Text = "All Years Revenue"

End Sub

Кажется, он не читает код

 For Each pf In pt.DataFields
 If pf.Name <> "Values" Then
   pf.Orientation = xlHidden
 End If
 Next pf

Пока я не нажал "Весь год" дляво второй раз.

...