プロが教える店舗&オフィスのセキュリティ対策術

一定期間内の数量と価格をチェックするために
エクセルでマクロを組みましたが下記のエラーが出てしまいます。

実行時エラー ’1004’
Worksheet クラスのPivot tablesプロパティを取得できません

ソースは
'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"データ!R1C1:R1000C19").CreatePivotTable TableDestination:= _
"[価格.xls]ワーク1!R1:R65536", TableName:="ピボットテーブル1",
DefaultVersion:= _
xlPivotTableVersion10
ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("商品CD",
_
"データ")
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("数量")
.Orientation = xlDataField
.Caption = "合計 / 数量"
.Position = 1
.Function = xlSum
End With
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("単価")
.Orientation = xlDataField
.Caption = "最大値 / 単価"
.Function = xlMax
End With
Range("B1").Select
With ActiveSheet.PivotTables("ピボットテーブル1").DataPivotField
.Orientation = xlColumnField
.Position = 1
End With
End Sub
です。
ストップしているのは↓の部分と思われます。

ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("商品CD",
_
"データ")

どうすればエラーが回避できるでしょうか。
ご教授お願いします。

A 回答 (1件)

こんにちは。



>ストップしているのは↓の部分と思われます。
>
>ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("商品CD",

との事なので、おそらく『ActiveSheet』が曲者なのでしょう。
PivotTable作成時に、作成先である"ワーク1"がActiveになっていないのではないでしょうか?

"データ"シートと"ワーク1"シートは"価格.xls"ブック内にあるのですね?
その前提で、ActiveWorkbookやActiveSheetなど、
状況に依存するようなBookやSheetの指定を避けるとして、

With Workbooks("価格.xls").PivotCaches.Add(SourceType:=xlDatabase, _
                      SourceData:="データ!R1C1:R1000C19")
  With .CreatePivotTable(TableDestination:="ワーク1!R1C1", _
              DefaultVersion:=xlPivotTableVersion10)
    .AddFields RowFields:=Array("商品CD", "データ")
    With .PivotFields("数量")
      .Orientation = xlDataField
      .Caption = "合計 / 数量"
      .Function = xlSum
    End With
    With .PivotFields("単価")
      .Orientation = xlDataField
      .Caption = "最大値 / 単価"
      .Function = xlMax
    End With
    With .DataPivotField
      .Orientation = xlColumnField
      .Position = 1
    End With
  End With
End With
...などとしてみてはどうでしょう。

また、データ元範囲は"データ!R1C1:R1000C19"...のように固定でよいのでしょうか?
可変範囲に対応させるなら
SourceData:=Sheets("データ").Range("A1").CurrentRegion
...などとするか、
毎回新規にPivotTableを作成し直すのではなく、
可変範囲の名前定義を使って、更新だけ行うようにする事も検討されてはいかがでしょう。
(参考)
http://oshiete1.goo.ne.jp/qa2097393.html

また、これは余計な事かもしれませんが、本題材であれば
http://oshiete1.goo.ne.jp/c232.html
Office系ソフトカテゴリのほうが良かったかもしれませんね。
    • good
    • 0

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