AW: PivotCache
27.11.2008 15:03:27
fcs
Hallo Mario,
mit ADODB und den dann erforderlichen Parametern kenn ich mich leider nicht aus.
Bei funktionieren jedenfalls die beiden nachfolgenden Beispiele.
im 1. beispiel habe ich per Makrorecorder externe Daten aus ACCESS importiert und mit dem Assisstenten dann eine Pivot-Tabelle erstellt. Den aufgezeichneten Code hab ich dann entsprechend umgesárbeitte.
Beim 2. Code hab ich via externe daten importieren eine Abrage erstellt und dann zum schluss im Assistenten den Pivotbericht erstellt.
Arbeitetz man die Makros im Schrittmodus ab, dann sieht man wie sich die Daten im Picot ändern, wenn die Datenquelle gewechselt wird.
Gruß
Franz
Sub DB_Pivot2()
'externe Datenquelle eines Excel-Pivottabellen-Berichtes via SQL anpassen
'Microsoft Office 2003 Professional
'Test Zeilen definition von Tabellenblatt und Pivottabele
stractive_sheet_name = ActiveWorkbook.Worksheets(2).Name
strpivot_table = ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(1).Name
'Ermittlung cacheindex
lngcache_index = ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table). _
CacheIndex
'SQL String
'1. Datenquelle
strdb_path = "\\S040A0025\S014123$\"
strdb_name = "Test_2008-11-26" 'Dateiname "Test_2008-11-26.mdb" ohne Dateiendung
strsql = "SELECT Tabelle1.DatsatzNr, Tabelle1.Feld01, Tabelle1.Feld02" _
& " FROM `" & strdb_path & strdb_name & "`.Tabelle1 Tabelle1" _
& " ORDER BY Tabelle1.Feld01"
'Datenquelle Pivottabelle aktualisieren
ActiveWorkbook.PivotCaches(lngcache_index).CommandText = strsql
'2. Datenquelle
strdb_path = "C:\Lokale Daten\Test\"
strdb_name = "Test" ' Dateiname "Test.mdb" ohne Dateiendung
strsql = "SELECT Tabelle1.Feld01, Tabelle1.Feld02" _
& " FROM `" & strdb_path & strdb_name & "`.Tabelle1 Tabelle1" _
& " ORDER BY Tabelle1.Feld01"
'Datenquelle Pivottabelle aktualisieren
ActiveWorkbook.PivotCaches(lngcache_index).CommandText = strsql
End Sub
Sub DB_Pivot1()
'externe Datenquelle eines Excel-Pivottabellen-Berichtes anpassen
'Microsoft Office 2003 Professional
' OLE-Datenconnection zu einer ACCESS-Datenbank
'1. Teil des Connection Strings
strCon1 = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";"
strCon1 = strCon1 & "User ID=Admin;"
'2. Teil ist variabel mit Dateiname der Datenbank
'3. Teil des Connection Strings
strCon3 = "Mode=Share Deny Write;"
strCon3 = strCon3 & "Extended Properties="""";"
strCon3 = strCon3 & "Jet OLEDB:System database="""";"
strCon3 = strCon3 & "Jet OLEDB:Registry Path="""";"
strCon3 = strCon3 & "Jet OLEDB:Database Password="""";"
strCon3 = strCon3 & "Jet OLEDB:Engine Type=5;"
strCon3 = strCon3 & "Jet OLEDB:Database Locking Mode=0;"
strCon3 = strCon3 & "Jet OLEDB:Global Partial Bulk Ops=2;"
strCon3 = strCon3 & "Jet OLEDB:Global Bulk Transactions=1;"
strCon3 = strCon3 & "Jet OLEDB:New Database Password="""";"
strCon3 = strCon3 & "Jet OLEDB:Create System Database=False;"
strCon3 = strCon3 & "Jet OLEDB:Encrypt Database=False;"
strCon3 = strCon3 & "Jet OLEDB:Don't Copy Locale on Compact=False;"
strCon3 = strCon3 & "Jet OLEDB:Compact Without Replica Repair=False;"
strCon3 = strCon3 & "Jet OLEDB:SFP=False"
'Test Zeilen definition von Tabellenblatt und Pivottabele
stractive_sheet_name = ActiveWorkbook.Worksheets(1).Name
strpivot_table = ActiveWorkbook.Worksheets(1).PivotTables(1).Name
'Ermittlung cacheindex
lngcache_index = ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table). _
CacheIndex
'SQL String
'1. Datenquelle
strdb_path = "\\S040A0025\S014123$\"
strdb_name = "Test_2008-11-26.mdb"
strsql = "SELECT Tabelle1.Feld01, Tabelle1.Feld02 FROM Tabelle1" _
& " ORDER BY Tabelle1.Feld01;"
strCon2 = "Data Source=" & strdb_path & strdb_name & ";" 'variabler Teil Connection-String
'Datenquelle Pivottabelle aktualisieren
With ActiveWorkbook.PivotCaches(lngcache_index)
.Connection = strCon1 & strCon2 & strCon3
.CommandText = strsql
End With
ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table).RefreshTable
'2. Datenquelle
strdb_path = "C:\Lokale Daten\Test\"
strdb_name = "Test.mdb"
strsql = "SELECT Tabelle1.Feld01, Tabelle1.Feld02 FROM Tabelle1" _
& " ORDER BY Tabelle1.Feld01;"
strCon2 = "Data Source=" & strdb_path & strdb_name & ";" 'variabler Teil Connection-String
'Datenquelle Pivottabelle aktualisieren
With ActiveWorkbook.PivotCaches(lngcache_index)
.Connection = strCon1 & strCon2 & strCon3
.CommandText = strsql
End With
ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table).RefreshTable
End Sub