- 締切済み
エクセルのマクロ
一定期間内の数量と価格をチェックするために エクセルでマクロを組みましたが下記のエラーが出てしまいます。 実行時エラー ’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", _ "データ") どうすればエラーが回避できるでしょうか。 ご教授お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- pauNed
- ベストアンサー率74% (129/173)
こんにちは。 >ストップしているのは↓の部分と思われます。 > >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系ソフトカテゴリのほうが良かったかもしれませんね。