Option Explicit
Const BlankFactor = 9.5
Sub Splits()
Dim Rw As Long, Rws As Long, Cols As Long, Sets As Long
Dim i As Long, j As Long, k As Long
Dim Data As Range, Pages As Long
Dim PRange As Range
Dim CRange As Range
Dim MySheet As String
Application.ScreenUpdating = False
Cells(1, 1).Select
Set Data = Range(Cells(1, 1), Cells(1, 1).End(xlToRight))
Cols = Data.Columns.Count + 1
If Cols > 255 Then Cols = 2
Columns(Cols).ColumnWidth = 1
Rws = Range("A1").End(xlDown).Row()
Rw = ActiveSheet.HPageBreaks(1).Location.Row() - 1
Sets = (Rws / Rw) + 1
If Cols * Sets > 255 Then
Pages = (Cols * Sets) / 255
End If
MySheet = ActiveSheet.Name
ActiveSheet.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Tmp"
Cells.ClearContents
With ActiveSheet
.DisplayAutomaticPageBreaks = True
.PageSetup.PrintArea = "$1:$1"
For i = 1 To Cols
For j = 0 To 255 - Cols Step Cols
.Columns(j + i).ColumnWidth = .Columns(i).ColumnWidth
Next j
Next i
End With
SortCols Cols
ActiveSheet.PageSetup.PrintArea = ""
Sheets(MySheet).Activate
i = 1
k = 0
Set CRange = Range(Cells(1, 1), Cells(Rw, Cols))
For j = 0 To Pages
With Sheets("Tmp")
Set PRange = Range(.Cells(j * Rw + 1, 1), .Cells(j * Rw + Rw, Cols))
Debug.Print PRange.Address
End With
PRange = CRange.Value
For i = 1 To CInt(255 / Cols) - 1
Set CRange = CRange.Offset(Rw)
Set PRange = PRange.Offset(, Cols)
PRange = CRange.Value
Next
Next j
Set Data = Nothing
Application.ScreenUpdating = True
End Sub
Sub SortCols(Cols As Long)
Dim BkCol As Long, VPos As Single, Pos As Single, Space As Single
Dim i As Long, NewWidth As Single
ActiveSheet.PageSetup.PrintArea = "$1:$1"
BkCol = ActiveSheet.VPageBreaks(1).Location.Column
ActiveSheet.PageSetup.PrintArea = ""
VPos = Columns(BkCol).Left
Pos = Columns(Cols + 1).Left
Space = VPos Mod Pos
NewWidth = Cells(1, Cols).ColumnWidth + Int(Space / (Int(VPos / Pos) + 1)) / BlankFactor
For i = Cols To 255 Step Cols
Cells(1, i).ColumnWidth = NewWidth
Next
End Sub
|