2012-12-07 26 views
5

Può qualche modo spiegare in che modo deselezionare tutti gli elementi in una tabella pivot appena creata in modo da poter tornare indietro e selezionare solo uno o due elementi? Ho provato il seguente:Deseleziona tutti gli elementi in una tabella pivot utilizzando vba

.PivotItems("(Select All)").Visible = False 

Grazie.

+0

È sempre necessario selezionare una cella, quindi cosa succede se si seleziona invece una cella casuale? – PowerUser

+0

Desidero solo selezionare due celle particolari, quindi ho voluto deselezionarle tutte e quindi selezionare solo le due che desidero. – Chris2015

+0

Bene, non è necessario deselezionare prima la selezione corrente. Potresti saltare direttamente alla selezione di quelle due celle? – PowerUser

risposta

6

Questo è probabilmente il più vicino si può arrivare a ciò che si vuole:

Dim i As Long 
.PivotItems(1).Visible = True 
For i = 2 To .PivotItems.Count 
    .PivotItems(i).Visible = False 
Next 

questo renderà la prima opzione l'unica opzione selezionata (sempre che sia all'interno di un con che punta al PivotField). Se sai cosa vuoi prima mano ... modifica di conseguenza.

+0

Ecco cosa sono andato con. Ha funzionato alla grande. Grazie! Dim i As Integer con ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Area business") .Orientation = xlRowField .Position = 1 Per i = 2 To .PivotItems.Count .PivotItems (i) .Visible = False .PivotItems ("Fuoco ed EMS - Uniform"). Visible = True .PivotItems ("Police - Uniform"). Visible = True .PivotItems (i - 1) .Visible = False Next end Con – Chris2015

+0

o Piuttosto i i Integer Con ActiveSheet.PivotTables ("PivotTable1") PivotFields ("Area di business") .Orientation = xlRowField .Posizione = 1 Per i = 2 Per .PivotItems.Count .PivotItems (i - 1). .Visible = false .PivotItems ("Fire and EMS - Uniform"). Visible = True .PivotItems ("Police - Uniform"). Visible = True .PivotItems ("(vuoto)").Visibile = Falso Avanti i Fine con – Chris2015

+0

Avevo usato questo approccio e ho trovato che fosse ancora troppo lento ma girando il manuale su true (cioè PivotTable.ManualUpdate = True) lo rendeva sopportabile. È descritto qui: http: //stackoverflow.com/questions/764504/speed-up-pivot-table-filtering-vba-code –

1

Verificare quanto segue. Seleziona i dati per il nome del campo specifico. Si prega di notare che è necessario almeno selezionare un elemento per impostazione predefinita. Inoltre, non dimenticare che se si desidera nascondere gli articoli, È possibile nascondere solo gli elementi contigui in un campo di tabella pivot. Forse al caricamento della pagina, o del foglio di lavoro aperto o di uno qualsiasi degli altri trigger secondari, è possibile selezionare determinati elementi da selezionare in base a un campo specifico. Quindi consentire al codice di procedere con qualsiasi altra cosa.

Sub specificItemsField() 
Dim pf As PivotField 
Dim pi As PivotItem 
Dim strPVField As String 

strPVField = "Field Name" 
Set pt = ActiveSheet.PivotTables(1) 
Set pf = pt.PivotFields(strPVField) 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

On Error Resume Next 
    pf.AutoSort xlManual, pf.SourceName 
    For Each pi In pf.PivotItems 
     pi.Visible = True 
    Next pi 
    pf.AutoSort xlAscending, pf.SourceName 

Application.DisplayAlerts = True 
Application.ScreenUpdating = True 

End Sub  
0

Ecco come faccio per la selezione del filtro personalizzato. Può essere più lento a causa del doppio loop.

Dim toSelect(1 To 3) As String 

toSelect(1) = "item1" 
toSelect(2) = "item2" 
toSelect(3) = "item3" 


For Each pvItem In objField.PivotItems 
    For Each st In toSelect 
     If pvItem.Value = st Then 
      pvItem.Visible = True 
      Exit For 
     Else 
      pvItem.Visible = False 
     End If 
    Next 
Next 
2

Ho scoperto che il ciclo attraverso ogni elemento di dati prende un sacco di tempo, cosa si può fare se si desidera filtrare su un singolo elemento in un perno senza scorrendo tutte le voci è utilizzare il seguente codice:

ActiveSheet.PivotTables("Your Pivot Name").PivotFields("Your Field Name").ClearAllFilters 
ActiveSheet.PivotTables("Your Pivot Name").PivotFields("Your Field Name").PivotFilters.Add _ 
    Type:=xlCaptionEquals, Value1:="Your string here" 

questo è fondamentalmente un filtro di etichetta ma ha funzionato per me.

Problemi correlati