ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Manipulate pivot tables in VBA (https://www.excelbanter.com/excel-programming/340741-manipulate-pivot-tables-vba.html)

Ronny[_3_]

Manipulate pivot tables in VBA
 
Hi all,

I have a pivot table that I have to work with every day, and I was
hoping to automate a couple of things with VBA code. I have most of it
solved, except one thing. So I was hoping for some help here.
Is it possible to hide rows with the data 0?

So let's say that we have a list of customers (customers in the rows)
and revenue in the data section, and I want to "hide" the customers
with 0 revenue. There is something in the columns, so it needs to be
applied to the row total. There are two fields in the data section
(revenue and qty) and I want to hide the rows if it has 0 as revenue,
even if there will be a volume in the second data field.
And to make it even more complicated, it is according to the current
selection. There are selections in the page section, so in total the
revenue might be something else, but it is if the row total for the
current selection is 0 that I want to hide the item.


Product: "Selected product 1"

Month 1 Month 2 Total
Revenue Volume Revenue Volume Revenue Volume
Customer 1 2 000 11 3 000 17 5 000 28
Customer 2 1 000 4 2 000 8 3 000 12
Customer 3 0 1 0 0 0 1
Customer 4 0 0 0 0 0 0

In this case I want to not hide Customer 3 and 4 in the pivot table.

I have made a PT object (as pivot table) and two variables t and i (as
Integer)

With PT
With .PivotFields("Customer Name")
t = .PivotItems.Count
Debug.Print t 'About 8 000 names now

For i = 0 To t

'Hide item if row total for data "Revenue" is 0

Next i

End With


End With


Thanks in advance for any help.

Ronny


Frank M

Manipulate pivot tables in VBA
 
Hi Ronny,

It should be possible to catch changes to the pivottable with the Change
event on the worksheet that contains it. In the VBA editor you need to insert
a change event handler for the worksheet with the pivottable:

Private Sub Worksheet_Change(ByVal Target As Range)

MsgBox "Yes, change was caught!!!" ' just to check that the change was
caught - remove later

' Insert your own code for first unhiding the whole range of the
pivottable
' and then going through it for hiding the rows with 0 in the desired
column

End Sub

The Target range given as the input parameter to event handler can be used
to check for what has been changed, if that is needed, e.g. the page field or
certain pivot fields.

Notice that this Sub has to reside in worksheet object (when you look in the
project explorer). If you put it in a module or under the workbook the event
handler will not execute.

I assume from your post that you know how to hide and unhide rows through VB
code, so I will not detail that here.


Hope that this helps


Best regards,

Frank M.


"Ronny" wrote:

Hi all,

I have a pivot table that I have to work with every day, and I was
hoping to automate a couple of things with VBA code. I have most of it
solved, except one thing. So I was hoping for some help here.
Is it possible to hide rows with the data 0?

So let's say that we have a list of customers (customers in the rows)
and revenue in the data section, and I want to "hide" the customers
with 0 revenue. There is something in the columns, so it needs to be
applied to the row total. There are two fields in the data section
(revenue and qty) and I want to hide the rows if it has 0 as revenue,
even if there will be a volume in the second data field.
And to make it even more complicated, it is according to the current
selection. There are selections in the page section, so in total the
revenue might be something else, but it is if the row total for the
current selection is 0 that I want to hide the item.


Product: "Selected product 1"

Month 1 Month 2 Total
Revenue Volume Revenue Volume Revenue Volume
Customer 1 2 000 11 3 000 17 5 000 28
Customer 2 1 000 4 2 000 8 3 000 12
Customer 3 0 1 0 0 0 1
Customer 4 0 0 0 0 0 0

In this case I want to not hide Customer 3 and 4 in the pivot table.

I have made a PT object (as pivot table) and two variables t and i (as
Integer)

With PT
With .PivotFields("Customer Name")
t = .PivotItems.Count
Debug.Print t 'About 8 000 names now

For i = 0 To t

'Hide item if row total for data "Revenue" is 0

Next i

End With


End With


Thanks in advance for any help.

Ronny




All times are GMT +1. The time now is 06:23 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com