Option Explicit
Sub ClearZZ()
Application.ScreenUpdating = 0
With Sheets(2)
.UsedRange.Offset(28, 0).Clear
.Range(.[a8], Cells(27, .UsedRange.Columns.Count)).ClearContents
End With
Application.ScreenUpdating = 1
End Sub
Sub zz()
Application.ScreenUpdating = 0
If Sheets(1).[a1048576].End(3).Row = 6 Then Exit Sub
Dim ar As Variant, br(), zc&, zr&, n&, i&, ii&, j&, k&, h%, MyCell As Range, t As Variant, f$
Dim rng As Range, rng2 As Range, rng3 As Range, rng4 As Range, rng5 As Range, rng6 As Range, rng7 As Range
Dim w(6), wc(1), rc(), a(), b(1 To 5)
rc = Array(0, 2, 3, 6)
ar = [a28:ao28].FormulaR1C1
For Each t In ar
f = f & Chr(2) & t
Next
w(0) = Split(Mid(f, 2), Chr(2))
w(2) = Array("Signing", "Signing", "Signing", "Signing", "Signing")
w(3) = Array("Competent", "Head of accounts", "Head of personnel affairs", "Financial Director", "General Director")
w(6) = w(0): w(6)(0) = "Total of above"
For i = 2 To UBound(w(0))
If Len(w(0)(i)) Then w(6)(i) = "=r[-6]c"
Next
With Sheets(1)
zr = .[a1048576].End(3).Row
ar = .[a8].CurrentRegion.FormulaR1C1
zc = UBound(ar, 2)
End With
ReDim a(1 To zc + 1)
i = IIf((zr - 7) Mod 20, Int((zr - 7) / 20) + 1, Int((zr - 7) / 20))
ReDim br(1 To i * 27 + UBound(w) + 1, 1 To zc + 1)
i = Int(UBound(br, 2) / 5)
With Sheets(2)
f = ""
.ResetAllPageBreaks
For i = 1 To zc + 1
f = f & Chr(2) & i
a(i) = .Columns(i).ColumnWidth / 2 + j: j = j + .Columns(i).ColumnWidth
Next
b(1) = 1: j = j - a(2) * 2
For i = 2 To 5
b(i) = Application.Match(j / 4 * (i - 1) + a(2), a, 1)
Next
b(5) = b(5) - 2
wc(0) = Split(Mid(f, 2), Chr(2))
wc(1) = Array(b(1), b(2), b(3), b(4), b(5))
If .[a1048576].End(3).Row > 34 Then .Rows("35:" & .[a1048576].End(3).Row).Delete Else .Rows(28).Copy .Rows(34)
If .[xfd7].End(1).Column > zc + 1 Then .Range(.Cells(1, zc + 2), .Cells(1, .[xfd7].End(1).Column)).EntireColumn.Delete
Set MyCell = ActiveCell
For i = 3 To UBound(ar)
n = n + 1
br(n, 1) = i - 2
For j = 1 To UBound(ar, 2)
br(n, j + 1) = ar(i, j)
Next
If (i - 2) Mod 20 = 0 Then
For ii = 0 To UBound(rc)
h = IIf(rc(ii) Mod 6, 1, 0)
For j = 0 To UBound(wc(h))
br(rc(ii) + n + 1, wc(h)(j)) = w(rc(ii))(j)
Next
Next
k = (i - 2) / 20 * 27
.HPageBreaks.Add .Rows(k + 7)
If rng Is Nothing Then
Set rng = .Cells(k - 19, 1).Resize(20, zc + 1)
Set rng2 = .Cells(k + 1, 1).Resize(7, zc + 1)
Set rng3 = Union(.Range(.Cells(k + 1, 1), .Cells(k + 1, 3)), .Range(.Cells(k + 7, 1), .Cells(k + 7, 3)))
Set rng4 = .Range(.Cells(k + 5, b(5)), .Cells(k + 6, b(5) + 4))
Set rng5 = .Range(.Cells(k + 3, b(5)), .Cells(k + 6, b(5) + 4))
Set rng6 = .Range(.Cells(k + 5, b(5) - 1), .Cells(k + 5, 1))
Set rng7 = .Range(.Cells(k + 2, 1), .Cells(k + 6, zc + 1))
Else
Set rng = Union(rng, .Cells(k - 19, 1).Resize(20, zc + 1))
Set rng2 = Union(rng2, .Cells(k + 1, 1).Resize(7, zc + 1))
Set rng3 = Union(rng3, Union(.Range(.Cells(k + 1, 1), .Cells(k + 1, 3)), .Range(.Cells(k + 7, 1), .Cells(k + 7, 3))))
Set rng4 = Union(rng4, .Range(.Cells(k + 5, b(5)), .Cells(k + 6, b(5) + 4)))
Set rng5 = Union(rng5, .Range(.Cells(k + 3, b(5)), .Cells(k + 6, b(5) + 4)))
Set rng6 = Union(rng6, .Range(.Cells(k + 5, b(5) - 1), .Cells(k + 5, 1)))
Set rng7 = Union(rng7, .Range(.Cells(k + 2, 1), .Cells(k + 6, zc + 1)))
End If
n = n + 7
End If
Next
If n < 22 Then GoSub less
If n > k Then
n = UBound(br) - 6: k = n - 6: i = n - 20
Set rng = Union(rng, .Cells(i, 1).Resize(20, zc + 1))
Set rng2 = Union(rng2, .Cells(n, 1).Resize(7, zc + 1))
Set rng3 = Union(rng3, Union(.Range(.Cells(n, 1), .Cells(n, 3)), .Range(.Cells(n + 6, 1), .Cells(n + 6, 3))))
Set rng4 = Union(rng4, .Range(.Cells(n + 4, b(5)), .Cells(n + 5, b(5) + 4)))
Set rng5 = Union(rng5, .Range(.Cells(n + 2, b(5)), .Cells(n + 5, b(5) + 4)))
Set rng6 = Union(rng6, .Range(.Cells(n + 4, b(5) - 1), .Cells(n + 4, 1)))
Set rng7 = Union(rng7, .Range(.Cells(n + 1, 1), .Cells(n + 5, zc + 1)))
For ii = 0 To UBound(rc)
h = IIf(rc(ii) Mod 6, 1, 0)
For j = 0 To UBound(wc(h))
br(rc(ii) + n - 7, wc(h)(j)) = w(rc(ii))(j)
Next
Next
End If
.[a8].Resize(UBound(br), UBound(br, 2)) = br
.[a8].Resize(1, zc + 1).Copy: rng.PasteSpecial Paste:=xlPasteFormats
.[a28].Resize(7, zc + 1).Copy: rng2.PasteSpecial Paste:=xlPasteFormats
Debug.Print rng.Address(0, 0)
Application.CutCopyMode = 0
rng.EntireRow.RowHeight = .Rows(8).RowHeight
rng7.Font.Size = 24
rng7.Font.Bold = 1
rng7.HorizontalAlignment = xlCenter
rng3.EntireRow.RowHeight = 60: rng3.MergeCells = True
For i = 7 To 10
Next
rng5.HorizontalAlignment = xlCenterAcrossSelection
.Rows(.[a1048576].End(3).Row).Delete
.PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(.[a1048576].End(3).Row, zc + 1)).Address
.PageSetup.FitToPagesWide = 1
End With
MyCell.Select
Set rng = Nothing: Set rng2 = Nothing: Set MyCell = Nothing: Set rng3 = Nothing
Set rng4 = Nothing: Set rng5 = Nothing: Set rng6 = Nothing: Set rng7 = Nothing
Rem Call PRINT_ALL
Application.ScreenUpdating = 1
End
less:
With Sheets(2)
Set rng = .Cells(8, 1).Resize(20, zc + 1)
Set rng2 = .Cells(28, 1).Resize(7, zc + 1)
Set rng3 = Union(.Cells(28, 1), .Cells(34, 1))
Set rng4 = .Range(.Cells(32, b(5)), .Cells(33, b(5) + 4))
Set rng5 = .Range(.Cells(30, b(5)), .Cells(33, b(5) + 4))
Set rng6 = .Range(.Cells(32, b(5) - 1), .Cells(32, 1))
Set rng7 = .Range(.Cells(29, 1), .Cells(33, zc + 1))
End With
Return
End Sub
Bookmarks