
Option Explicit
Sub create_calendar()
Dim sh_dati As Worksheet, sh_cal As Worksheet
Dim data_region As Range, i As Long, myrng As Range
Dim tot_sheets As Integer
Set sh_dati = Sheets("DATI")
Set sh_cal = Sheets("SCHEMA_STAMPA")
Set data_region = sh_dati.Range("A1").CurrentRegion
With sh_dati.Sort
.SortFields.Clear
.SortFields.Add Key:=data_region.Cells(1, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange data_region
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Set data_region = data_region.Offset(1).Resize(data_region.Rows.Count - 1)
For i = 1 To data_region.Rows.Count Step 10
Set myrng = Range(data_region.Cells(i, "A"), data_region.Cells(i + 9, "G"))
myrng.Copy
sh_cal.Cells(3, "A").PasteSpecial xlPasteValues
sh_cal.PrintOut preview:=True
Next
Application.CutCopyMode = False
Range("A1").Select
MsgBox "Ho terminato."
End Sub |
Option Explicit
Sub create_calendar()
Dim sh_dati As Worksheet, sh_cal As Worksheet
Dim data_region As Range, i As Long, my_range As Range
Dim tot_sheets As Integer
If MsgBox("Preparare il calendario sulla base dei dati inseriti?", vbQuestion + vbYesNo, "Calendario") = vbNo Then Exit Sub
Set sh_dati = Sheets("DATI")
Set sh_cal = Sheets("SCHEMA_STAMPA")
Set data_region = sh_dati.Range("A1").CurrentRegion
'annulla tutte le interruzioni di pagina manuali nella scheda di stampa
sh_cal.ResetAllPageBreaks
Application.ScreenUpdating = False
'riordina tutta la base dati
With sh_dati.Sort
.SortFields.Clear
.SortFields.Add Key:=data_region.Cells(1, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange data_region
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'imposta un riferimento alle righe contenenti i dati riordinati
Set data_region = data_region.Offset(1).Resize(data_region.Rows.Count - 1)
'a dieci elementi per scheda, calcola il n° di schede necessarie a contenerli tutti
tot_sheets = (data_region.Rows.Count 10) + Abs(data_region.Rows.Count Mod 10 > 0)
'imposta un riferimento al modello di scheda da replicare
Set my_range = sh_cal.Range("A1:G17")
'copia incolla le schede necessarie, in successione, nel foglio schema_stampa a step di 12 righe
For i = 2 To tot_sheets
my_range.Copy
sh_cal.Cells((i - 1) * 12 + 1, "A").PasteSpecial xlPasteAll
Next
'preleva i dati da ricopiare, dieci alla volta, e li incolla nelle schede di pertinenza
For i = 1 To data_region.Rows.Count Step 10
Set my_range = Range(data_region.Cells(i, "A"), data_region.Cells(i + 9, "G"))
my_range.Copy
sh_cal.Cells(((i 10) * 12) + 3, "A").PasteSpecial xlPasteValues
'inserisce un'interruzione di pagina in corrispondenza di ogni inizio scheda dopo la prima scheda
If i > 1 Then sh_cal.HPageBreaks.Add Before:=Cells((i 10) * 12 + 1, "A")
Next
sh_cal.Rows("1:1000").RowHeight = 33
Application.CutCopyMode = False
Range("A1").Select
Application.ScreenUpdating = True
MsgBox "Ho terminato", vbInformation
End Sub
|
Option Explicit
Sub create_calendar()
Dim sh_dati As Worksheet, sh_cal As Worksheet
Dim data_region As Range, i As Long, my_range As Range
Dim tot_sheets As Integer
If MsgBox("Preparare il calendario sulla base dei dati inseriti?", vbQuestion + vbYesNo, "Calendario") = vbNo Then Exit Sub
Set sh_dati = Sheets("DATI")
Set sh_cal = Sheets("SCHEMA_STAMPA")
Set data_region = sh_dati.Range("A1").CurrentRegion
'annulla tutte le interruzioni di pagina manuali nella scheda di stampa
sh_cal.ResetAllPageBreaks
Application.ScreenUpdating = False
'riordina tutta la base dati
With sh_dati.Sort
.SortFields.Clear
.SortFields.Add Key:=data_region.Cells(1, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange data_region
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'imposta un riferimento alle righe contenenti i dati riordinati
Set data_region = data_region.Offset(1).Resize(data_region.Rows.Count - 1)
'a dieci elementi per scheda, calcola il n° di schede necessarie a contenerli tutti
tot_sheets = (data_region.Rows.Count 10) + Abs(data_region.Rows.Count Mod 10 > 0)
'imposta un riferimento al modello di scheda da replicare
Set my_range = sh_cal.Range("A1:G17")
'copia incolla le schede necessarie, in successione, nel foglio schema_stampa a step di 12 righe
For i = 2 To tot_sheets
my_range.Copy
sh_cal.Cells((i - 1) * 12 + 1, "A").PasteSpecial xlPasteAll
Next
'preleva i dati da ricopiare, dieci alla volta, e li incolla nelle schede di pertinenza
For i = 1 To data_region.Rows.Count Step 10
Set my_range = Range(data_region.Cells(i, "A"), data_region.Cells(i + 9, "G"))
my_range.Copy
sh_cal.Cells(((i 10) * 12) + 3, "A").PasteSpecial xlPasteValues
'inserisce un'interruzione di pagina in corrispondenza di ogni inizio scheda dopo la prima scheda
If i > 1 Then sh_cal.HPageBreaks.Add Before:=Cells((i 10) * 12 + 1, "A")
Next
'inserisce l'ultima interruzione manuale di pagina
sh_cal.HPageBreaks.Add Before:=Cells((i 10) * 12 + 1, "A") '<<<<<<<<<<<
'imposta l'altezza delle righe a 33 punti
sh_cal.Rows("1:1000").RowHeight = 33
Application.CutCopyMode = False
Range("A1").Select
Application.ScreenUpdating = True
MsgBox "Ho terminato", vbInformation
End Sub |
