2016-04-28 13 views
0

私はピボットテーブルは私に次のエラーを与えている作成するために、記録したマクロを与えて、ピボットテーブルを作成するVBAマクロを録画:は、アプリケーション定義のエラー

Run-time error 1004: Application-defined or object-defined error.

私はthis Microsoft linkあたりとして記録したマクロから関連する部分を削除しました。しかし、私はまだ同じエラーを受け取ります。

Sub testmacro() 
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _ 
     ActiveWorkbook.Connections("WorksheetConnection_Sheet8!$A$1:$E$162"), Version _ 
     :=xlPivotTableVersion15).CreatePivotTable TableDestination:="", _ 
     TableName:="PivotTable27", DefaultVersion:=xlPivotTableVersion15 
    With ActiveSheet.PivotTables("PivotTable27").CubeFields("[Range].[and not]") 
     .Orientation = xlPageField 
     .Position = 1 
    End With 
    With ActiveSheet.PivotTables("PivotTable27").CubeFields("[Range].[term]") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    ActiveSheet.PivotTables("PivotTable27").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable27").CubeFields("[Measures].[Count of family 2]"), "Count of family" 
    With ActiveSheet.PivotTables("PivotTable27").PivotFields(_ 
     "[Measures].[Count of family 2]") 
     .Caption = "Distinct Count of family" 
     .Function = xlDistinctCount 
    End With 
End Sub 

デバッガは、ActiveWorkbook.PivotCaches.Create行でエラーをスローします。新しいワークシートが開きますが、空白です。ありがとうございました。

+1

あなたが削除した部品で投稿したコードはありますか?あなたのリンクは 'sheets.add'を削除するように言いますが、あなたは持っていません。 – Dan

+0

ありがとう、ダン。はい。コードからsheets.addを削除して再実行しても、同じエラーが表示されます。元の投稿からその行を削除します。 –

+0

問題を再現できません。記録されたマクロなので、外部接続が動作していると推測しています。名前を二重にチェックしましたか?私のバージョンのExcel(2016)では、 'Version:= 6'と' DefaultVersion:= 6'を使用しています。 – OldUgly

答えて

0

短答 - ピボットテーブルを指す外部データソースを定義します。長い


あなたが見ることができます...私は別のワークブックからピボットテーブルを構築するためのマクロを記録する場合、私は次の取得...

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    "[JunkData.xlsx]Sheet1!R1C1:R11C3", Version:=6).CreatePivotTable _ 
    TableDestination:="Sheet6!R3C1", TableName:="PivotTable1", DefaultVersion _ 
    :=6 

回答SourceType:=xlDatabaseが指定されています。

また、ワークブックJunkData.xlsxを外部データソースに設定することもできます。 JunkDataファイルを閉じた状態で、Excelで[データ] - > [既存の接続] - > [このコンピュータ上の接続] - > [詳細を参照]を選択し、JunkDataにナビゲートして選択してプロンプトに従います。

次に、新しいマクロを記録できます。ピボットテーブルの作成ダイアログで、「外部データソースを使用する」を選択し、JunkDataを選択します。

私は、あなたがSourceType:=xlDatabase代わりのSourceType:=xlExternalを持つべきであるように

ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _ 
    ActiveWorkbook.Connections("JunkData"), Version:=6).CreatePivotTable _ 
    TableDestination:="Sheet7!R3C1", TableName:="PivotTable2", DefaultVersion _ 
    :=6 

あなたのコードが見えます...このコード行を取得します。

実際、最初の例をSourceType:=xlDatabaseに変更すると、同じエラーが表示されます(例:TableDestination:=""に変更されました)。最初の例は、JunkDataファイルが閉じている場合にも実行されません。

2番目の例はうまくいきます(TableDestinationを変更した場合)。

閉じたファイルからピボットテーブルを作成する必要がある場合は、外部データ接続を行う必要があると思います。

+0

私は閉じたファイルからピボットテーブルを作成していません。私は開いているのと同じファイルに作成しています。なぜ私は同じファイル内のデータを参照しているので、マクロがxlDatabaseではなくxlExternalを指定しているのか分かりません。他の質問と同じように、最初からコードを作成すると、http://stackoverflow.com/questions/36899254/xldistinctcount-in-pivottable-not-working-as-intended-vba?noredirect=1#comment61450760_36899254 xlDatabase、しかし、私はxlDistinctCountを動作させることができないというもう一つの問題を抱えています。 –

+0

@matsuo_basho - 私は新しい回答を掲載しました。問題は「Workbook.Connections.Add」が見つからないと思う – OldUgly

0

最初の回答とは十分に異なるので、別の回答を追加しています。


  1. 個別カウントを使用するためには、ピボットテーブルを挿入するとき、「データモデルにこのデータを追加」を選択しなければなりません。
  2. これは、VBAの特定のWorkbook.Connections.Add2呼び出しに相当します。
  3. ピボットテーブルのソースとしてデータモデルを指定すると、データが同じブックにある場合でも、ソースはxlExternalと識別されます。

次のマクロは、さまざまなシナリオ(新しく開かれたブック、ブックが開かれ、データモデルは既に存在しています)で私に役立ちます。 .Add2コールを削除すると、同じエラーが表示されます。私はDistinct Countを得ることができます。

Dim NewSht As Worksheet 
' 
    Workbooks("Book2").Connections.Add2 "WorksheetConnection_Sheet1!$A$1:$D$20", "" _ 
     , "WORKSHEET;[Book2]Sheet1", "Sheet1!$A$1:$D$20", 7, True, False 
    Set NewSht = Sheets.Add 
    Debug.Print NewSht.Name 
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _ 
     ActiveWorkbook.Connections("WorksheetConnection_Sheet1!$A$1:$D$20"), Version _ 
     :=6).CreatePivotTable TableDestination:=NewSht.Name & "!R3C1", TableName:= _ 
     "myPivotTable", DefaultVersion:=6 
    NewSht.Select 
    Cells(3, 1).Select 
    With ActiveSheet.PivotTables("myPivotTable").CubeFields("[Range].[Name]") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    ActiveSheet.PivotTables("myPivotTable").CubeFields.GetMeasure "[Range].[Name]" _ 
     , xlSum, "Count of Name" 
    ActiveSheet.PivotTables("myPivotTable").AddDataField ActiveSheet.PivotTables(_ 
     "myPivotTable").CubeFields("[Measures].[Count of Name]"), "Count of Name" 
    With ActiveSheet.PivotTables("myPivotTable").PivotFields(_ 
     "[Measures].[Count of Name]") 
     .Caption = "Distinct Count of Name" 
     .Function = xlDistinctCount 
    End With 
End Sub 
関連する問題