Sua pergunta ainda pode continuar. Por exemplo, você não diz se está criando uma Tabela Dinâmica desde o início e, em seguida, adicionando campos, ou se isso é executado em uma Tabela Dinâmica existente que já possa ter campos nela.
Alguém acabou de me indicar a postagem / postagem do blog Rubber Duck Problem , e estou também vou apontar para você, porque ajuda as pessoas a responderem se souberem tudo o que é relevante.
No link , diz a sintaxe para .adddatafield é AddDataField (Field, Caption, Function) com a função sendo opcional.
Então, o que acontece se você tentar isso?
If Name = "[effRent_perBed].[Manager]" Then
.Orientation = xlColumnField
Else:
With ActiveSheet.PivotTables(1)
.AddDataField ActiveSheet.PivotTables(1) _
CubeFields(cubName), _
"Average of " & cubName, _
xlAverage
End With
End if
Existem alguns problemas com o seu bloco de código original. Não entendo por que vocês estão interagindo com a coleção CubeFields e também iterando por meio de uma contagem de cubefields. ou seja, este bit:
For Each cubField In pvtTable.CubeFields
For i = 1 To pvtTable.CubeFields.Count
Isso não vai apenas percorrer tudo pelo quadrado do Cubefields.count? Você deve ser capaz de abandonar esse bit i = 1 para pvtTable.CubeFields.Count e simplesmente usar a referência cubField diretamente.
Acho que o motivo pelo qual seu código não conseguiu definir o resumo para XLAverage é porque, depois de adicionar um campo à área Data, o nome é alterado de forma efetiva. Você pode ver isso se deixar o DataField no lugar e executar este código:
Sub Macro1()
'
' Macro1 Macro
'
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
Debug.Print cubField.Name
Next
End Sub
Isso imprimirá os nomes de todos os campos na janela imediata (supondo que você tenha aberto), no ponto em que você verá que enquanto você terá um resultado para [effRent_perBed]. [Manager], este NÃO é o campo de dados . O DataField será algo como [Measures]. [Average of effRent_perBed]
E é por isso que seu código falhou: você ainda estava se referindo ao campo de interesse como se ainda fosse um CubeField. Mas assim que você tentar adicioná-lo à área DataFields, um novo DataField será criado e esse o que você precisou alterar a agregação.
Como eu disse acima, você pode fazer isso no momento em que criar o DataField.