#久々のテーマ投稿のような気が :)
PivotTablesをVBAで操作する時の話。
『RowFieldsやColumnFieldsにAutoSort(自動並べ替えオプション)が手動以外に設定されていると、
そのPivotItems().Visible = True(アイテムを表示する)時に失敗する』
..という不具合があります。Excel97-2003の場合。2007,2010では発生しません。
対策としては「自動並べ替えオプション」を「手動」にする事で回避できます。
そう。こちらの話。
『マクロでピボットのPivotItemsのVisible = Trueができない』
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+201209/12090023.txt
今にして思えば
『【58912】「PivotItemクラスのVisibleプロパティを設定できません。」の解決法』
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=58912;id=excel
これも同様のケースだったんですね。
#当時は知りませんでした。力不足で申し訳ない..orz
さて、検証用コード。
97-2010で共通動作するようにPivotTableWizardメソッドを使ってみた。
エラー
『1004::PivotItem クラスの Visible プロパティを設定できません。』

PivotTablesをVBAで操作する時の話。
『RowFieldsやColumnFieldsにAutoSort(自動並べ替えオプション)が手動以外に設定されていると、
そのPivotItems().Visible = True(アイテムを表示する)時に失敗する』
..という不具合があります。Excel97-2003の場合。2007,2010では発生しません。
対策としては「自動並べ替えオプション」を「手動」にする事で回避できます。
そう。こちらの話。
『マクロでピボットのPivotItemsのVisible = Trueができない』
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+201209/12090023.txt
今にして思えば
『【58912】「PivotItemクラスのVisibleプロパティを設定できません。」の解決法』
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=58912;id=excel
これも同様のケースだったんですね。
#当時は知りませんでした。力不足で申し訳ない..orz
さて、検証用コード。
97-2010で共通動作するようにPivotTableWizardメソッドを使ってみた。
Option Explicit
'新規Workbookに簡易テストデータをセットしPivotTable作成。
'RowFields("F1")の自動並べ替えを昇順に設定。
Sub pre()
With Workbooks.Add(xlWBATWorksheet).Sheets(1)
.Range("A1:B2").Value = [{"F1","F2";"item01",1}]
.Range("A2:B2").AutoFill .Range("A2:B10"), xlFillSeries
With .PivotTableWizard(xlDatabase, "'" & .Name & "'!A1:B10", "")
.PivotFields("F1").Orientation = xlRowField
.PivotFields("F2").Orientation = xlDataField
.RowFields("F1").AutoSort xlAscending, ""
End With
End With
End Sub
'-------------------------------------------------
'自動並べ替え昇順のままPivotItemsをLoopしてVisible = True
Sub test1()
Dim p As PivotItem
With ActiveSheet.PivotTables(1).RowFields("F1")
For Each p In .PivotItems
p.Visible = True
Next
End With
End Sub
'新規Workbookに簡易テストデータをセットしPivotTable作成。
'RowFields("F1")の自動並べ替えを昇順に設定。
Sub pre()
With Workbooks.Add(xlWBATWorksheet).Sheets(1)
.Range("A1:B2").Value = [{"F1","F2";"item01",1}]
.Range("A2:B2").AutoFill .Range("A2:B10"), xlFillSeries
With .PivotTableWizard(xlDatabase, "'" & .Name & "'!A1:B10", "")
.PivotFields("F1").Orientation = xlRowField
.PivotFields("F2").Orientation = xlDataField
.RowFields("F1").AutoSort xlAscending, ""
End With
End With
End Sub
'-------------------------------------------------
'自動並べ替え昇順のままPivotItemsをLoopしてVisible = True
Sub test1()
Dim p As PivotItem
With ActiveSheet.PivotTables(1).RowFields("F1")
For Each p In .PivotItems
p.Visible = True
Next
End With
End Sub
エラー
『1004::PivotItem クラスの Visible プロパティを設定できません。』

'AutoSortメソッドで手動にするとエラーは出ません。
Sub test2()
Dim p As PivotItem
With ActiveSheet.PivotTables(1).RowFields("F1")
.AutoSort xlManual, "" '●
For Each p In .PivotItems
p.Visible = True
Next
End With
End Sub
'-------------------------------------------------
'念の為。
'既表示Itemを表示しようとするからエラーになっているわけではありません。
Sub test3()
Dim i As Long
With ActiveSheet.PivotTables(1).RowFields("F1")
.AutoSort xlManual, ""
For i = 2 To .PivotItems.Count
.PivotItems(i).Visible = False
Next
Stop
For i = 2 To .PivotItems.Count
.PivotItems(i).Visible = True
Next
Stop
.AutoSort xlAscending, ""
For i = 2 To .PivotItems.Count
.PivotItems(i).Visible = False
Next
Stop
For i = 2 To .PivotItems.Count
.PivotItems(i).Visible = True
Next
End With
End Sub
Sub test2()
Dim p As PivotItem
With ActiveSheet.PivotTables(1).RowFields("F1")
.AutoSort xlManual, "" '●
For Each p In .PivotItems
p.Visible = True
Next
End With
End Sub
'-------------------------------------------------
'念の為。
'既表示Itemを表示しようとするからエラーになっているわけではありません。
Sub test3()
Dim i As Long
With ActiveSheet.PivotTables(1).RowFields("F1")
.AutoSort xlManual, ""
For i = 2 To .PivotItems.Count
.PivotItems(i).Visible = False
Next
Stop
For i = 2 To .PivotItems.Count
.PivotItems(i).Visible = True
Next
Stop
.AutoSort xlAscending, ""
For i = 2 To .PivotItems.Count
.PivotItems(i).Visible = False
Next
Stop
For i = 2 To .PivotItems.Count
.PivotItems(i).Visible = True
Next
End With
End Sub