Excel 使用vba将数据透视计算字段添加到报表

Excel 使用vba将数据透视计算字段添加到报表,excel,pivot-table,calculated-field,vba,Excel,Pivot Table,Calculated Field,Vba,我有一张桌子。 我手动添加了3个计算字段f1、f2、f3。 我希望能够基于用户选择,使用vba构建透视报告 例如: 1.首先,用户选择要添加的“常规”字段(与将字段从透视表字段列表拖动到值区域相同) 这很有效 用户还选择要添加到报告值的计算字段f1 Sub AddCaclulatedFieldToColValues(fName As String) Dim objField As PivotField Set objField = GetCalculatedFi

我有一张桌子。 我手动添加了3个计算字段f1、f2、f3。 我希望能够基于用户选择,使用vba构建透视报告

例如: 1.首先,用户选择要添加的“常规”字段(与将字段从透视表字段列表拖动到值区域相同)

这很有效

  • 用户还选择要添加到报告值的计算字段f1

    Sub AddCaclulatedFieldToColValues(fName As String)
            Dim objField As PivotField
    
            Set objField = GetCalculatedFiledByName(fName)
    
            objField.Orientation = xlColumnField
    
    End Sub
    
    Function GetCalculatedFiledByName(name As String) As PivotField
    
        'Loop over all calculated fields
        For Each f In pivotTable.CalculatedFields
    
                'Test name
                If (f.name = name) Then
                        'Return field
                         Set GetCalculatedFiledByName = f
    
                         'Field found - exit loop
                         Exit For
                End If
       Next
    
    端函数

  • 设置字段方向时,此操作失败

    运行时错误1004应用程序定义或对象定义错误

    我认为它可能与名称有关,因为当手动将计算字段添加到值时,Excel名称正在更改。当尝试重新命名时(通过值字段设置->自定义名称),消息为:

    数据透视表字段已存在


    请注意。

    您不能将计算字段添加为行或列字段,只能添加为值字段(在表的主体中)。尝试手动操作,看看Excel的反应如何。@dmm当然可以。xlDataField不是xlColumnField。tx.不能将计算字段添加为行或列字段,只能添加为值字段(在表的主体中)。尝试手动操作,看看Excel的反应如何。@dmm当然可以。xlDataField不是xlColumnField。德克萨斯州。
    Sub AddCaclulatedFieldToColValues(fName As String)
            Dim objField As PivotField
    
            Set objField = GetCalculatedFiledByName(fName)
    
            objField.Orientation = xlColumnField
    
    End Sub
    
    Function GetCalculatedFiledByName(name As String) As PivotField
    
        'Loop over all calculated fields
        For Each f In pivotTable.CalculatedFields
    
                'Test name
                If (f.name = name) Then
                        'Return field
                         Set GetCalculatedFiledByName = f
    
                         'Field found - exit loop
                         Exit For
                End If
       Next