Sto lavorando a una Macro molto lunga per il mio lavoro e ho appena finito, ma questa è l'ultima parte e non importa cosa faccio, non riesco a capire la correzione. In questa tabella pivot, ho bisogno di avere "manager" come le colonne e tutto il resto (vale a dire tutti i mesi) nella sezione valori, con "valori" come le righe. Dopo aver armeggiato, sembra che tutti i campi registrati come CubeFields invece di PivotFields. Quando lo eseguo, non appena arriva a .Orientation = xlDataField, genera un "Errore di run-time 5 ... Call o argomento della procedura non valido." Devo anche assicurarmi che quei DataField siano mediati e in un formato numerico specifico. Niente di ciò che faccio funziona e qualsiasi consiglio / soluzione / soluzione alternativa sarebbe molto apprezzata! Di seguito sono riportati la macro e un link per il download del file per armeggiare.
Dim pvtTable As PivotTable
Dim cubField As CubeField
Dim i As Long
Dim cubName As String
Set pvtTable = ActiveSheet.PivotTables(1)
For Each cubField In pvtTable.CubeFields
For i = 1 To pvtTable.CubeFields.Count
With pvtTable.CubeFields(i)
If .Name = "[effRent_perBed].[Manager]" Then
.Orientation = xlColumnField
Else:
.Orientation = xlDataField
'has to be averaged
'has to have number format of ##0.00
End If
End With
Next
Next
Questa è una modifica che ho provato a fare in base al registratore di macro. Mette il campo nel campo dei valori, ma non c'è modo di cambiarlo in una media. Elenca semplicemente tutti i valori come "1 (Controlla l'immagine per un visual) . Quando arrivo a .Function = xlAverage, si dice Errore 1004: Impossibile impostare la proprietà Function della classe PivotField.
If Name = "[effRent_perBed].[Manager]" Then
.Orientation = xlColumnField
Else:
With ActiveSheet.PivotTables(1)
.AddDataField ActiveSheet.PivotTables(1) _
CubeFields(cubName), _
"Average of " & cubName
End With
With ActiveSheet.PivotTables(1).PivotFields(cubName)
.Caption = "Average of " & cubName
.Function = xlAverage
End With
Quando uso il registratore di macro per aggiungere qualcosa al campo dati, ottengo questo:
ActiveSheet.PivotTables("effRent_perBed_Pivot").CubeFields.GetMeasure _
"[effRent_perBed].[Jan-16]", xlSum, "Sum of Jan-16"
ActiveSheet.PivotTables("effRent_perBed_Pivot").AddDataField ActiveSheet. _
PivotTables("effRent_perBed_Pivot").CubeFields("[Measures].[Sum of Jan-16]"), _
"Sum of Jan-16"
With ActiveSheet.PivotTables("effRent_perBed_Pivot").PivotFields( _
"[Measures].[Sum of Jan-16]")
.Caption = "Average of Jan-16"
.Function = xlAverage
End With
Questa è una copia del file su cui sto lavorando. Mostra la tabella pivot non elaborata e quindi il prodotto finito. Devo farlo per 3 fogli, quindi devo passare in rassegna ciascuno di essi. https://drive.google.com/uc?export=download&id=1NLGg8DVEMHnB2Ad7NAKWySevq8naqFjr
Questo è anche pubblicato su altri forum (ho bisogno di avere più occhi su questo al più presto possibile) https://www.excelforum.com/excel-programming-vba-macros/1222588-unable-to-add-cubefield-pivotfield-as-a-data-field-in-vba.html#post4856940