Sub WorksheetLoop()
Dim bEvents As Boolean
Dim bAlerts As Boolean
Dim CalcMode As Long
Dim bScreen As Boolean
' save current settings
bEvents = Application.EnableEvents
bAlerts = Application.DisplayAlerts
CalcMode = Application.Calculation
bScreen = Application.ScreenUpdating
' disable events, alerts, automatic calculation & screen updating
With Application
.EnableEvents = False
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
FileToOpen = Application.GetOpenFilename _
(Title:="Seleziona un file da importare", _
FileFilter:="Excel Files *.xls* (*.xls*),")
If FileToOpen = False Then
MsgBox "Non è stato selezionato alcun file", vbExclamation, "Doh!!!"
Exit Sub
Else
Workbooks.Open Filename:=FileToOpen
End If
tmpBoolean = Pivot()
With Application
.EnableEvents = bEvents
.DisplayAlerts = bAlerts
.Calculation = CalcMode
.ScreenUpdating = bScreen
End With
MsgBox ("Procedura terminata")
End Sub
Function Pivot()
Dim wsDati As Worksheet, wsPivotta As Worksheet
Dim oPvtCch As PivotCache
Dim oPvtTbl As PivotTable
Dim ptField As PivotField
Dim rngDati As Range
Dim r As Long
Set wsDati = ActiveWorkbook.Worksheets("Riepilogo Righe")
r = wsDati.Cells(Rows.Count, 1).End(xlUp).Row 'occhio al riferimento di colonna
Set rngDati = wsDati.Range("A1:Y" & r) 'prendo gli stessi dati utilizzati nel foglio "Pivotta"
Set oPvtCch = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngDati) 'crea cache per tabella dal range
Set oPvtTbl = oPvtCch.CreatePivotTable(wsPivotta.Cells(7, 2)) 'crea pivot in nuovo foglio
With oPvtTbl
.RowAxisLayout xlOutlineRow
.Name = "Pivotta_VBA"
.PivotFields(6).Orientation = xlColumnField 'campo13, tredicesima colonna "Ufficio" etichetta di riga
.PivotFields(6).Position = 1 'primo elemento di riga
.PivotFields(13).Orientation = xlColumnField ' campo 3 "Sesso" etichetta di riga
.PivotFields(13).Position = 2 'secondo elemento di riga
.PivotFields(16).Orientation = xlColumnField ' campo 14 "Capo Ufficio" etichetta di colonna
.PivotFields(16).Position = 1 ' primo elemento di colonna
.PivotFields(18).Orientation = xlColumnField ' campo 14 "Capo Ufficio" etichetta di colonna
.PivotFields(18).Position = 1 ' primo elemento di colonna
.PivotFields(19).Orientation = xlColumnField ' campo 14 "Capo Ufficio" etichetta di colonna
.PivotFields(19).Position = 1 ' primo elemento di colonna
.PivotFields(20).Orientation = xlColumnField ' campo 14 "Capo Ufficio" etichetta di colonna
.PivotFields(20).Position = 1 ' primo elemento di colonna
'.PivotFields(6).Orientation = xlPageField 'campo 6 "Tipo di contratto" filtro rapporto
'.PivotFields(6).Position = 1
'.AddDataField .PivotFields(1), "N. Dipendenti", xlCount 'contegigo dei nomi dipendenti (campo 1)
'.AddDataField .PivotFields(7), "Stipendio Medio", xlAverage 'Media del campo stipendio
'.PivotFields("Stipendio Medio").NumberFormat = "_-* #,##0_-;-* #,##0_-;_-* ""-""??_-;_-@_-" 'formatto stipendio
'.TableStyle2 = "" 'formatto la tabella in modo identico a quella creata manualmente
For Each ptField In .RowFields 'elimino i subtotali
On Error Resume Next
ptField.Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
Next ptField
End With
'wsPivotta.Cells(11, 4).ShowDetail = True 'PER CREARE FOGLIO CON DETTAGLIO POSIZIONI
Set wb = Nothing
Set wsDati = Nothing
Set wsPivotta = Nothing
Set rngDati = Nothing
Set oPvtCch = Nothing
Set oPvtTbl = Nothing
End Function
|