Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Scusa del ritardo, spero tu possa leggerla.
Le routine sono tratte dal libro Passo per Passo Microsoft Office Excel 2007 Visual Basic for Applications di Reed Jacobson, edito da MONDADORI INFORMATICA
La sequenza delle Routine è la seguente:
Sub PivotFromExternal()
'Crea un rapporto di Tabella Pivot da una tabella Acces esterna posta
'nella stessa cartella documenti
Dim wc As WorkbookConnection
Dim pc As PivotCache
Dim s As String
Workbooks.Add
'Crea una nuova cartella
s = ThisWorkbook.Path & "\Orders.accdb" 'nella finestra immediata
s = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & s
'nella finestra immediata
Set wc = ActiveWorkbook.Connections.Add("", "", s, "Orders", 3)
'nella finestra immediata
'Individua il percorso verso il file di Acces, modifica il seguente
'codice:
'Workbooks("Cartel5").Connections.Add "Orders", "", Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=C:\Documents and Settings\Administrator\My Documents\Doc" _
, _
"uments\Studio\Excel\Excel2007 e VBA - Passo per Passo\Orders.accdb;Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:System" _
, _
" database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0" _
, _
";Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create Sy" _
, _
"stem Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Repl" _
, "ica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"), _
Array("Orders"), 3
Set pc = ActiveWorkbook.PivotCaches.Create(xlExternal, wc) 'nella
pc.CreatePivotTable ActiveCell 'nella finestra immediata
'finestra immediata, modifica il seguente codice
'ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("Orders"), Version:=xlPivotTableVersion12). _
CreatePivotTable TableDestination:="Foglio1!R1C1", TableName:= _
"Tabella_pivot2", DefaultVersion:=xlPivotTableVersion12
End Sub
Sub PivotSetStructure()
'Successiva alla macro PivotFromExternal su Modulo6
'Organizza una Tabella Pivot
Dim pt As PivotTable
Set pt = ActiveCell.PivotTable
pt.PivotFields("Net").Orientation = xlDataField 'nella finesra immediata
'Con xlDataField si converte il campo Net in un campo di dati, modifica
'il seguente codice:
'ActiveSheet.PivotTables("Tabella_pivot1").AddDataField ActiveSheet. _
PivotTables("Tabella_pivot1").PivotFields("Net"), _
"Somma di Net", xlSum
pt.DataFields(1).Caption = "Net " 'nella finesra immediata
'Invece di riferirci al campo specifico PivotItems("Somma di Net") si fa
'riferimento ad esso come ad un campo dell'insieme DataFields, modifica
'il seguente codice:
'ActiveSheet.PivotTables("Tabella_pivot1").DataPivotField. _
PivotItems("Somma di Net").Caption = "Net "
pt.PivotFields("Category").Orientation = xlRowField 'nella finesra
'immediata
pt.PivotFields("State").Orientation = xlPageField 'nella finesra
'immediata
pt.PivotFields("Date").Orientation = xlColumnField 'nella finesra
'immediata
'Non essendo necessaria l'istruzione Position viene eliminata la
'struttura With, modifica il seguente codice:
'With ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("Category")
'.Orientation = xlRowField
'.Position = 1
'End With
'With ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("State")
'.Orientation = xlPageField
'.Position = 1
'End With
'With ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("Date")
'.Orientation = xlColumnField
'.Position = 1
'End With
pt.ColumnFields("Date").DataRange.Cells(1).Group Periods:=Array(False, _
False, False, False, False, True, True) 'nella finesra immediata
'Si riferisce al campo Date per visualizzare i gruppi Trimestre e Anno
', True, True) invece d'indicare l'indirizzo, modifica il seguente codice:
'Range("B4").Select
'Selection.Group Start:=True, End:=True, Periods:=Array(False, _
False, False, False, False, True, True)
pt.DataBodyRange.Style = "Comma [0]" 'nella finesra immediata
'Invece di registrare l'intervallo di dati con il metodo PivotSelect si
'utilizza la proprietà DataBodyRange, modifica il seguente codice:
'ActiveSheet.PivotTables("Tabella_pivot1").PivotSelect "", _
'xlDataOnly, True
'Selection.Style = "Comma [0]"
End Sub
Sub PivotSetLayoutProva()
'Successiva alla macro PivotSetStructure su Modulo7
'Che già conosci
Dim pt As PivotTable
Dim pf As PivotField
Set pt = ActiveCell.PivotTable
Set pf = pt.ColumnFields("Anni")
pt.PageFields("State").CurrentPage = "Idaho"
pt.RowFields("Category").ShowAllItems = True
pf.ShowAllItems = True 'E' strano, i dati in Acces vanno dal
'01/01/2005 al 01/10/2007, nell'elaborare la tabella questa istruzione
'produce una colonna iniziale con il titolo <01/01/2005 e una colonna
'finale con il titolo >02/10/2007 ovviamente senza dati. Nell'struzione
'successiva abbiamo:
pf.PivotItems(1).Visible = False 'che è riferita alla colonna con il
'titolo <01/01/2005 che da l'errore, anche con la madro registrata.
'La successiva istruzione è:
pf.PivotItems(2).Visible = False 'che è riferita all'anno 2005 e
'funziona, mentre l'ultima istruzione è:
pf.PivotItems(pf.PivotItems.Count).Visible = False 'che è riferita alla
'colonna con il titolo >02/10/2007 che da l'errore, anche nella versione
'registrata. A questo punto sembrerebbe evidente che il problema risiede
'nell'istruzione pf.ShowAllItems = True che pruduce due colonne inutili
'che non possono essere nascostecon una routine.
pt.RowGrand = False
pt.HasAutoFormat = False
pt.PageFields("State").CurrentPage = "(All)"
pt.DataBodyRange.Columns(2).AutoFit
pt.DataBodyRange.ColumnWidth = pt.DataBodyRange.Columns(2). _
ColumnWidth + 1
pt.DisplayFieldCaptions = False
pt.ShowDrillIndicators = False
End Sub
Cordiali saluti