4

最初に 3 つの行ラベル フィールドを含む Excel 2010 ピボット テーブルがあります。

特定のフィールドをピボット テーブルの最下位の行ラベル フィールドとして追加するマクロを作成する必要があります。(説明しない理由により、ユーザーは通常の方法でこのフィールドを自分で追加することはできません。)

ただし、ユーザーがこのマクロを実行するまでに、行ラベルを追加または削除している可能性があります。

ピボット テーブルの一番下の位置にフィールドを追加すると、マクロ レコーダーは次のように表示します (3 つの行ラベルが既に選択されています)。

With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField")
    .Orientation = xlRowField
    .Position = 4
End With

ユーザーがいくつかのアイテムを追加または削除した場合、この位置番号 4 は正しくありません。コードに正しい位置番号を渡すにはどうすればよいですか?

を使用して高い目標を設定しようとするとPosition = 99、次のエラーが表示されます。

PivotField クラスの Position プロパティを設定できません

アイデアはありますか?

4

4 に答える 4

5

PivotFieldscount プロパティがあります。

With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField")
    .Orientation = xlRowField
    .Position = ActiveSheet.PivotTables("MyPivotTable").PivotFields.Count + 1
End With

また、 の代わりにPivotFields、他の選択肢を代用して、他のカウントを与えることができます。

  • 列フィールド
  • データフィールド
  • 隠しフィールド
  • ページフィールド
  • 行フィールド
  • 可視フィールド
于 2013-01-17T20:06:16.327 に答える
2

.Position = 4文字列を完全に破棄してみてください。つまり、次のようにします。

With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField")
    .Orientation = xlRowField
End With
于 2013-01-17T18:34:12.257 に答える
1

ブルートフォースソリューション:

Public Function GetPivotFieldPos(pt As PivotTable, fieldName As String)
    Dim cnt As Integer
    Dim pos As Integer
    Dim pf As PivotField

    On Error GoTo ErrHandler

    cnt = 0   '  might be 1-based!?
    pos = -1
    For Each pf In pt.PivotFields
        cnt = cnt + 1
        If pf.Name = fieldName Then
            pos = cnt
            Exit For
        End If
    Next

    GetPivotFieldPos = pos
    Exit Function

ErrHandler:
    GetPivotFieldPos = -1
    On Error GoTo 0
End Function
于 2013-01-17T18:36:34.403 に答える
1

当面のタスクがピボットテーブルに存在する可能性のある行フィールドの数をカウントすることである場合は、次のコード行をお楽しみください。

pt.RowRange.cells.count

これにより、ピボット行の数が得られます。ただし、これは合計行だけでなく見出し行もカウントします (合計がピボットテーブルに適用される場合)。そのため、状況に応じて 1 または 2 を引く必要があります。

ピボット可能な範囲を参照する方法の優れた説明は、ここにあります。

于 2013-01-17T19:23:11.123 に答える