使用するために (ほとんど) 正常に変更されたコードを見つけましたが、グループ化関数でエラーが発生しています。(現在) 3 つのワークブックを含むフォルダーがあります。各ワークブックは、シート名から各シート内のフィールドまで、まったく同じようにフォーマットされています。各ワークブックには、同じ一意のデータ ソース (ワークブックの 3 番目のシート) から派生した 2 つのピボットテーブルがあります。
新しいワークブックで、1 つのマスター ピボット テーブルに結合する共通フォルダーからワークブックを選択できるようにするスクリプトを実行できる必要があります。ソース データは次のようになります。
(各列の名前の後ろと行 2 のデータの後に使用されるスラッシュは、異なる列を区別するためだけに使用されています (合計 12、A から L を含む))
行 1 - 行 / 並べ替え / サブカテゴリ / パーツ / パラ / ページ / 配送 / アクション / 所有者 / 期日 / ステータス / 日付コンプ
行 2 - 2 / b / Confrnc / 2 / 2.2.1 / 8 / 出席 / 出席 / ジョン / 2013 年 5 月 23 日 / NotStarted / (空白)
各ワークブックには、このように設定されたデータ ソース シートがあり、複数のデータ行があります。
各ワークブックには、以下をコンパイルするピボット テーブルがあります。
行:
- サブキャット;
- アクション;
- オーナー;
- 状態
列:
- 期日
値:
- アクション数
ニーズに合わせて変更した次のコードを新しいワークブックの新しいモジュールにコピーして貼り付けました (ソース ワークブックと同じフォルダーに保存されます)。
Option Explicit
Declare Function SetCurrentDirectoryA Lib "kernel32" (ByVal Path As String) As Long
'---------------------------------------------------------------------------------------
' Author: Rob Bovey
'---------------------------------------------------------------------------------------
Sub ChDirNet(Path As String)
Dim Result As Long
Result = SetCurrentDirectoryA(Path)
If Result = 0 Then Err.Raise vbObjectError + 1, "Error changing to new path."
End Sub
'---------------------------------------------------------------------------------------
' Procedure : MergeFiles
' Author : KL
' Date : 22/08/2010
' Purpose : Demonstration (http://www.planetaexcel.ru/forum.php?thread_id=18518)
' Comments : Special thanks to
' Debra Dalgleish for helping to fix ODBC driver issue
' Hector Miguel Orozco Diaz for the "DeleteConnections_12" idea
'---------------------------------------------------------------------------------------
'
Sub MergeFiles()
Dim PT As PivotTable
Dim PC As PivotCache
Dim arrFiles As Variant
Dim strSheet As String
Dim strPath As String
Dim strSQL As String
Dim strCon As String
Dim rng As Range
Dim i As Long
strPath = CurDir
ChDirNet ThisWorkbook.Path
arrFiles = Application.GetOpenFilename("Excel Workbooks (*.xlsx), *.xlsx", , , , True)
strSheet = "Deliverables"
If Not IsArray(arrFiles) Then Exit Sub
Application.ScreenUpdating = False
If Val(Application.Version) > 11 Then DeleteConnections_12
Set rng = ThisWorkbook.Sheets(1).Cells
rng.Clear
For i = 1 To UBound(arrFiles)
If strSQL = "" Then
strSQL = "SELECT * FROM [" & strSheet & "$]"
Else
strSQL = strSQL & " UNION ALL SELECT * FROM `" & arrFiles(i) & "`.[" & strSheet & "$]"
End If
Next i
strCon = _
"ODBC;" & _
"DSN=Excel Files;" & _
"DBQ=" & arrFiles(1) & ";" & _
"DefaultDir=" & "" & ";" & _
"DriverId=790;" & _
"MaxBufferSize=2048;" & _
"PageTimeout=5"
Set PC = ThisWorkbook.PivotCaches.Add(SourceType:=xlExternal)
With PC
.Connection = strCon
.CommandType = xlCmdSql
.CommandText = strSQL
Set PT = .CreatePivotTable(TableDestination:=rng(6, 1))
End With
With PT
With .PivotFields(1) 'Sub Category
.Orientation = xlRowField
.Position = 1
End With
.AddDataField .PivotFields(8), "DueDate", xlCount 'Action Required
With .PivotFields(1) 'Action Required
.Orientation = xlRowField
.Position = 1
End With
With .PivotFields(1) 'Owner
.Orientation = xlRowField
.Position = 1
End With
With .PivotFields(2) 'Status
.Orientation = xlRowField
.Position = 1
.DataRange.Cells(1).Group _
Start:=True, _
End:=True, _
Periods:=Array(False, False, False, False, True, False, False)
End With
End With
'Clean up
Set PT = Nothing
Set PC = Nothing
ChDirNet strPath
Application.ScreenUpdating = True
End Sub
Private Sub DeleteConnections_12()
' This line won't work and wouldn't be necessary
' in the versions older than 2007
'*****************************************************************************
On Error Resume Next: ThisWorkbook.Connections(1).Delete: On Error GoTo 0
'*****************************************************************************
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
スクリプトを実行すると、92 行目で実行時エラー 1004: Cannot group that selection. が表示されます。
.DataRange.Cells(1).Group _
Start:=True, _
End:=True, _
Periods:=Array(False, False, False, False, True, False, False)
私の人生では、私は迷子になり、これを修正する場所がどこにも見つかりません。
誰でも推奨事項や提案を行うことができますか?
私はまだ VBA について非常に初心者ですが、ピボットテーブルについてはそうではありません。ワークブックは 3 人の異なるユーザーによって所有され、定期的に更新されるため、ソース ワークブックのすべてのデータを手動でマスターにコンパイルし、そこからピボットテーブルを実行する必要がないようにしています。OFFSET 数式を使用してソース データ範囲に名前を付けています。これをピボットテーブルのデータ ソースとして使用しているため、すべてが一度に更新され、数式は自動的に範囲を拡大して、追加された新しい行または列を含めます。ソースデータシート。
また、グループ化ポイントまで機能するからといって、ピボットフィールドの変数が正しく行われているとは限らないことも認識しています。
Excel 2013 および 2010 で作業しています。