Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3998 / 13646 ツリー ←次へ | 前へ→

【58912】「PivotItemクラスのVisibleプロパティを設定できません。」の解決法 あい 08/11/18(火) 4:22 質問[未読]
【58922】Re:「PivotItemクラスのVisibleプロパティ... n 08/11/18(火) 13:00 発言[未読]
【58923】Re:「PivotItemクラスのVisibleプロパティ... あい 08/11/18(火) 13:39 質問[未読]
【58935】Re:「PivotItemクラスのVisibleプロパティ... n 08/11/19(水) 0:26 発言[未読]
【58938】Re:「PivotItemクラスのVisibleプロパティ... あい 08/11/19(水) 9:59 質問[未読]
【58946】Re:「PivotItemクラスのVisibleプロパティ... n 08/11/19(水) 13:41 発言[未読]
【58951】Re:「PivotItemクラスのVisibleプロパティ... あい 08/11/19(水) 16:55 質問[未読]
【58956】Re:「PivotItemクラスのVisibleプロパティ... n 08/11/19(水) 22:54 発言[未読]
【58959】Re:「PivotItemクラスのVisibleプロパティ... あい 08/11/20(木) 13:41 お礼[未読]

【58912】「PivotItemクラスのVisibleプロパティを...
質問  あい  - 08/11/18(火) 4:22 -

引用なし
パスワード
   ピボットテーブルのマクロを作っていて引っ掛かりました。

「実行時エラー1004
PivotItemクラスのVisibleプロパティを設定できません。」

というのが出てきてしまいます。
マクロの記録で出てきたコードなのに、何故動かなくなってしまうんでしょうか?
また、どこをどうすれば改善するのでしょうか?

というか、昨日まで動いていたのが、突然今日動かなくなったのでどうしたら良いのか全然分かりません。
以下がそのコードです。
宜しくお願い致します。

Sub ピボット()
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("A")
    .PivotItems("1").Visible = True
    .PivotItems("2").Visible = True
    .PivotItems("3").Visible = False
  End With
  With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("A")
    .PivotItems("1").Visible = True
    .PivotItems("2").Visible = True
    .PivotItems("3").Visible = False
  End With
  With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("A")
    .PivotItems("1").Visible = True
    .PivotItems("2").Visible = True
    .PivotItems("3").Visible = False
  End With
End Sub

【58922】Re:「PivotItemクラスのVisibleプロパテ...
発言  n  - 08/11/18(火) 13:00 -

引用なし
パスワード
   まずは、ステップ実行して、どの行でエラーが出るか確認してみてください。
エラー行のPivotItem(X)が、PivotTables("ピボットテーブルXX")のPivotFields("A")に
在るかどうか確認してみましょう。
仮にPivotItemのリストにあったとしても、元データにも在るかどうかも確認してみてください。

【58923】Re:「PivotItemクラスのVisibleプロパテ...
質問  あい  - 08/11/18(火) 13:39 -

引用なし
パスワード
   ▼n さん:

返信ありがとう御座居ます。

>まずは、ステップ実行して、どの行でエラーが出るか確認してみてください。
>エラー行のPivotItem(X)が、PivotTables("ピボットテーブルXX")のPivotFields("A")に
>在るかどうか確認してみましょう。
→あります。

>仮にPivotItemのリストにあったとしても、元データにも在るかどうかも確認してみてください。
→あります。


行フィールドを2つ使っているんですけど、(何て表現したら良いのか分からないですが)データアイテムに近い方の行フィールドでは稼動するのに、遠い方はエラーが出るっぽいです…

【58935】Re:「PivotItemクラスのVisibleプロパテ...
発言  n  - 08/11/19(水) 0:26 -

引用なし
パスワード
   ・エラーが出る状況で、同じ動作を手作業で行った場合はどうなりますか?


・また、こちらでも再現できる状況を最低限のデータで提示する事は可能ですか?

例えば
   A列 B列 C列
 1 A  B  C
 2 1  1  1
 3 1  2  1
 4 1  3  1
 5 2  1  1
 6 2  2  1
 7 2  3  1
 8 3  1  1
 9 3  2  1
10 3  3  1

上記データレイアウトで、

Sub Macro1()
  With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
                    SourceData:="Sheet1!A1:C10") _
                    .CreatePivotTable(TableDestination:=Range("E1"))
    .AddFields RowFields:=Array("A", "B")
    .PivotFields("C").Orientation = xlDataField
  End With
End Sub

こんなピボットテーブルを作成した場合で、

Sub ピボット()
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("A")
    .PivotItems("1").Visible = True
    .PivotItems("2").Visible = True
    .PivotItems("3").Visible = False
  End With
End Sub

このマクロのどの行でエラーになる、とか。


・また、Excelのバージョンは何でしょう?

【58938】Re:「PivotItemクラスのVisibleプロパテ...
質問  あい  - 08/11/19(水) 9:59 -

引用なし
パスワード
   ▼n さん:
ありがとうございます。

取り敢えずマクロの記録で作ってみたのを貼り付けます。

Sub Macro1()

  ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="=リスト"). _
    CreatePivotTable TableDestination:=Range("A5"), TableName:="ピボットテーブル1"
  
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("あ")
    .Orientation = xlPageField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("い")
    .Orientation = xlPageField
    .Position = 2
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("う")
    .Orientation = xlPageField
    .Position = 3
  End With
  
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("A")
    .Orientation = xlRowField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("B")
    .Orientation = xlRowField
    .Position = 2
  End With
  
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("1")
    .Orientation = xlColumnField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("2")
    .Orientation = xlDataField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("2")
    .Orientation = xlDataField
    .Position = 2
  End With
  Range("D6").Select
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データ")
    .Orientation = xlColumnField
    .Position = 1
  End With
  
  ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データの個数 : 2").Function _
    = xlSum
End Sub

レイアウトは以下のような感じ。

     2の個数  2の合計
     ○  ×  ○  × 
A B 
1 1  2   3  1  -2
  2  3   2  2  -4
  3  0   4  0  -6
2 1  5   1  4  -1
  2  6   1  7  -6
  3  1   0  5   0
3 1  8   9  9  -10
  2  1   1  1  -1
  3  0   5  0  -6


Sub ピボット()
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("A")
    .PivotItems("1").Visible = True
    .PivotItems("2").Visible = True
    .PivotItems("3").Visible = False
  End With
End Sub

.PivotItems("1").Visible = True
で引っ掛かります。
全部をFalseにしようとするとエラーが出るのは仕様なのかなと理解しているのですが、Trueでエラーが出るのが良く分かりません。

Sub ピボット()
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("B")
    .PivotItems("1").Visible = True
    .PivotItems("2").Visible = True
    .PivotItems("3").Visible = False
  End With
End Sub
であれば問題なく動くようです。


>・エラーが出る状況で、同じ動作を手作業で行った場合はどうなりますか?
>・また、Excelのバージョンは何でしょう?
手作業では問題無く動きます。
エクセル2000です。
宜しくお願いします

【58946】Re:「PivotItemクラスのVisibleプロパテ...
発言  n  - 08/11/19(水) 13:41 -

引用なし
パスワード
   ...んー。
こちらでサンプルデータを作っても再現できません。(xl2000)
ピボットテーブルを作り直して見るのが手っ取り早いような気がしますが、
>>仮にPivotItemのリストにあったとしても、元データにも在るかどうかも確認してみてください。
>→あります。
ここの再確認の必要があると思います。
・"ピボットテーブル1"というのが別のピボットテーブルだったとか
・SourceData:="=リスト"範囲に含まれていなかったとか
・半角全角の違いがあったとか

>手作業では問題無く動きます。
との事なので、それをマクロ記録して比較するとか、置き換えてみるとかしてみてください。

Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2008/11/19 ユーザー名 : no name
'

'
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("A")
    .PivotItems("1").Visible = False
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("A")
    .PivotItems("1").Visible = True
  End With
End Sub

【58951】Re:「PivotItemクラスのVisibleプロパテ...
質問  あい  - 08/11/19(水) 16:55 -

引用なし
パスワード
   ▼n さん:

>ピボットテーブルを作り直して見るのが手っ取り早いような気がしますが
作り直したら問題は発生しないようです。
ただ、マクロ実行中に途中で止めたりすると、また同様の不具合が出るようです。
何が原因なんでしょうか。。。?

別のピボットテーブルだったり、範囲違いや誤字脱字というのは問題ありませんでした。
手作業をマクロ記録して、コードを置き換えるというのもやってみたんですが、解決しなかったのでこちらに質問しました(コードも一字一句同じでした)。

【58956】Re:「PivotItemクラスのVisibleプロパテ...
発言  n  - 08/11/19(水) 22:54 -

引用なし
パスワード
   >マクロ実行中に途中で止めたりすると、また同様の不具合が出るようです。
どのマクロを、途中でどのようにして止めてらっしゃるのか解りませんが、
こちらでは再現しないので
>何が原因なんでしょうか。。。?
ちょっと解りません。すみません。

別アプローチするなら、全表示の場合

Sub try()
  Dim pvi As PivotItem
  
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("A")
    For Each pvi In .PivotItems
      pvi.Visible = True
    Next
  End With
End Sub

となりますから、試してみてください。

特定のItemを非表示にしたい時、表示Itemがなくなる場合のエラー対策を考えて、
効率悪いかもしれませんが2回Loopして

Sub try2()
  Const chk = "3" 'とか"[3|4]"とか
  Dim pvi As PivotItem
  
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("A")
    For Each pvi In .PivotItems
      pvi.Visible = True
    Next
    For Each pvi In .PivotItems
      If pvi.Value Like chk Then pvi.Visible = False
    Next
  End With
End Sub

こんな感じではいかがでしょう。

【58959】Re:「PivotItemクラスのVisibleプロパテ...
お礼  あい  - 08/11/20(木) 13:41 -

引用なし
パスワード
   ▼n さん:

いつもありがとうございます。
アドバイスを参考に研究してみます。

3998 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free