プロが教えるわが家の防犯対策術!

ushiushiです。

Excel2000でマクロを組んでいます。
ピポットテーブルで、合計欄を展開して、csvファイルを作成しようとしていますが、
展開するときに「実行時エラー'1004'」が出てどうしよう使用もありません。

デバックで、見てその続きを処理させるとその後は何事もなく動きます。

どこが悪いのか見当が付きませんので、すみませんが、お教え下さい。
よろしくお願い致します。

---- macro -----
Range("表の左隅").Activate 'ピポットテーブルの左上にセルを移動
ActiveSheet.PivotTables("ピボットテーブル3").RefreshTable   'ピポットテーブル更新
'最終地点に移動
Selection.End(xlDown).Select '表の最下段に移動
Selection.End(xlToRight).Select '表の右端へ移動。ここで合計欄にセルが移動する
'データを展開
If Selection.Column < 255 Then  '更新時、データが無い場合セルが255列にいるかどうか確認
Selection.ShowDetail = True  '表を展開。ここでエラーが発生する
Else
GoTo owari           '表が無い場合は次の処理へ移動
End If
---- EOF ----
---- Error messages ----
実行時エラー'1004'
RangeクラスのShowDetailプロパティを設定できません。
---- EOF ----

A 回答 (1件)

>Selection.End(xlDown).Select    '表の最下段に移動


>Selection.End(xlToRight).Select   '表の右端へ移動。ここで合計欄にセルが移動する
これでは不安定なので

With ActiveSheet.PivotTables("ピボットテーブル3")
  .RefreshTable
  With .DataBodyRange
    With .Item(.Count)
      If Not IsEmpty(.Value) Then
        .ShowDetail = True
      End If
    End With
  End With
End With

..などのように範囲を指定したほうが良いです。
DataBodyRange や TableRange1 、 TableRange2 などの各プロパティについて調べてみてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。
DataBodyRangeで表を選択して、.Item(.Count)で表全体を確認し、IsEnpty(.value)で最終行を選択したという事でしょうか?
「With」をあまり使わないので、理解するまで時間が掛かってしまいました。(まだ100%解っていない様な気もするが)

実際に動かしてみると、非常に小気味よく動きますね。レコードマクロとはぜんぜん違います。とても効率よく動いています。

大変勉強になりました。ありがとうございました。

お礼日時:2012/03/23 15:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています