vba to add fields to pivot table, needs work

rishijain11

Board Regular
hi, i'm using the below code to add fields to my pivot table. it works great, but my problem is it only works for one pivot table on each page.

can someone help me edit this so that if there are multiple pivots on the same sheet?

if it helps, i'm just using the code this guy created in the "Pivot Table Fields Macro Buttons.xlsm" file here:
https://www.excelcampus.com/vba/macro-buttons-pivot-table-fields/



Sub Toggle_Row_Field()
'Add/Remove the field to the pivot table.
'The field is determined by the button text that calls the macro.

Dim pt As PivotTable
Dim pf As PivotField
Dim sField As String
Dim shp As Shape



'Set variables
Set pt = ActiveSheet.PivotTables(1)
Set shp = ActiveSheet.Shapes(Application.Caller)
sField = shp.TextFrame.Characters.Text

'Toggle field
'If visible then hide it
If pt.PivotFields(sField).Orientation = xlRowField Then
pt.PivotFields(sField).Orientation = xlHidden
shp.Fill.ForeColor.Brightness = 0.5
Else 'Add to Rows area
pt.PivotFields(sField).Orientation = xlRowField
shp.Fill.ForeColor.Brightness = 0
End If

End Sub
 

DanteAmor

Well-known Member
Try this

Code:
Sub Toggle_Row_Field()
  'Add/Remove the field to the pivot table.
  'The field is determined by the button text that calls the macro.
  Dim pt As PivotTable
  Dim pf As PivotField
  Dim sField As String
  Dim shp As Shape
  'Set variables
  For Each pt In ActiveSheet.PivotTables
    'Set pt = ActiveSheet.PivotTables(1)
    Set shp = ActiveSheet.Shapes(Application.Caller)
    sField = shp.TextFrame.Characters.Text
    'Toggle field
    'If visible then hide it
    If pt.PivotFields(sField).Orientation = xlRowField Then
      pt.PivotFields(sField).Orientation = xlHidden
      shp.Fill.ForeColor.Brightness = 0.5
    Else 'Add to Rows area
      pt.PivotFields(sField).Orientation = xlRowField
      shp.Fill.ForeColor.Brightness = 0
    End If
  Next
End Sub
 

rishijain11

Board Regular
i have 3 pivot tables on my worksheet. is there a way i can get identify, by name, which pivot tables are affected when i press each button?
or, is there a way i can indicate for the macro not to touch a pivot table named "V5"
 

DanteAmor

Well-known Member
Try this

Code:
Sub Toggle_Row_Field()
  'Add/Remove the field to the pivot table.
  'The field is determined by the button text that calls the macro.
  Dim pt As PivotTable, pf As PivotField
  Dim sField As String, shp As Shape
  Dim sName As String
  'Set variables
  For Each pt In ActiveSheet.PivotTables
    sName = pt.Name
    Select Case UCase(sName)
      Case "V5", "V6", "ETC" [COLOR=#0000ff]'not to touch these pivot table (capitalize names)[/COLOR]
      Case Else
        Set shp = ActiveSheet.Shapes(Application.Caller)
        sField = shp.TextFrame.Characters.text
        'Toggle field
        If pt.PivotFields(sField).Orientation = xlRowField Then
          pt.PivotFields(sField).Orientation = xlHidden
          shp.Fill.ForeColor.Brightness = 0.5
        Else 'Add to Rows area
          pt.PivotFields(sField).Orientation = xlRowField
          shp.Fill.ForeColor.Brightness = 0
        End If
    End Select
  Next
End Sub
 

DanteAmor

Well-known Member
wow, beautiful...thanks so much Dante.

i noticed you code very cleanly, was wondering if you had any youtube videos to recommend?
I don't have any particular video.
When I have doubts I search on google ;)


Glad to help you, thanks for the feedback.
 

rishijain11

Board Regular
Hey Dante, I added another pivot table to the sheet, and when i use the buttons now, i'm getting this error:

"Unable to set the Orientation property of the PivotField class"

do you know why?



Try this

Code:
Sub Toggle_Row_Field()
  'Add/Remove the field to the pivot table.
  'The field is determined by the button text that calls the macro.
  Dim pt As PivotTable
  Dim pf As PivotField
  Dim sField As String
  Dim shp As Shape
  'Set variables
  For Each pt In ActiveSheet.PivotTables
    'Set pt = ActiveSheet.PivotTables(1)
    Set shp = ActiveSheet.Shapes(Application.Caller)
    sField = shp.TextFrame.Characters.Text
    'Toggle field
    'If visible then hide it
    If pt.PivotFields(sField).Orientation = xlRowField Then
      pt.PivotFields(sField).Orientation = xlHidden
      shp.Fill.ForeColor.Brightness = 0.5
    Else 'Add to Rows area
      pt.PivotFields(sField).Orientation = xlRowField
      shp.Fill.ForeColor.Brightness = 0
    End If
  Next
End Sub
 

Some videos you may like

This Week's Hot Topics

  • Importing multiple excel files into one spreadsheet
    Hi, I'm trying to import multiple excel files (with the same format into a single spreadsheet) so that each day's file is listed underneath the...
  • find many based on a certain criteria
    good evening, I hope someone can help me? I have a workbook sheet 2 contains lots of data.... I would like to be able to find anything on sheet...
  • How to copy multiple rows using If
    Hi all, I'm very new to VBA and have written this simple code to copy certain cells if a certain cell within that row contains any data. I need...
  • VBA If statement
    Dear All, I have two dates, where I'd like a message box to pop, if the dates are between this criteria. [CODE] sDate1 = #10/1/2019#...
  • Text Format
    I have a sheet for user to keyin the data. The format of the data can be 451 / 1903, 0012 / 9908 or 00287 / 0099. The number after the "/" is...
  • Macro to copy values across rows and transposing them and add the user id
    [FONT=Times New Roman][SIZE=3][COLOR=#000000][/COLOR][/SIZE][/FONT][FONT=Calibri][SIZE=3][COLOR=#000000]Hi,[/COLOR][/SIZE][/FONT] [FONT=Times New...
Top