Page Layout in multi-column documents

M

moishy

I've posted a question on http://tinyurl.com/6mflczk but it ha
seemingly come to a dead end (i.e. no response).

Here's the issue I'm dealing with, page layout in multi-colum
documents, since Word is not a desktop publishing solution, it doesn'
have a built-in option to align all columns equally at the bottom, an
therefore I have to do it manually. I'm using a function to find th
difference in points between two columns, the trouble is it doesn'
always work, sometimes it will return a value of several hundred point
when there hardly is a difference at all.

I'm posting the function here; I would appreciate any help I can get i
solving the mystery, and or improve the function.

Please note:
a. Although I will appreciate any help including alternative
suggestions, I would prefer if I can get some help with the function I'
currently using.
b. The function must work on a right-to-left forma
document.
c. Speed is a very important factor, as I plan to us
the function to display the difference in a text box on a user form tha
will get updated every time a change is made to one of the columns.


Code
-------------------

Function ColumnDiff()

Dim i As Integer, iCounter As Integer, iPos As Long, iPosCol As Long
Dim iCol() As Currency, nCol As Integer
Dim myRange As Range, iViewType As Integer, bEnd As Boolean

Const MaxDiff = 0 ' difference (in points) for the function to ignore

If Selection.StoryType 1 Then MsgBox "Cursor not in main text!": Exit Function
Set myRange = Selection.Range
Application.ScreenUpdating = False
iViewType = ActiveWindow.View.Type: ActiveWindow.View.Type = wdPrintView
iPos = -1
With Selection
.Collapse wdCollapseEnd
iCounter = iCounter + 1: StatusBar = iCounter
While iPos .Start
X2: iPos = .Start
If Dialogs(wdDialogFormatColumns).Columns = 1 Then GoTo X0
ReDim iCol(Dialogs(wdDialogFormatColumns).Columns + 1)
iPosCol = iPos: iPos = iPos - 1: nCol = 0
While iPos .Start
iPos = .Start
If Dialogs(wdDialogFormatColumns).Columns = 1 _
Or Dialogs(wdDialogFormatColumns).ColumnNo nCol _
Then GoTo X1
nCol = Dialogs(wdDialogFormatColumns).ColumnNo
iCol(nCol) = .Information(wdVerticalPositionRelativeToPage)
.GoToNext wdGoToLine
iCounter = iCounter + 1: StatusBar = iCounter
Wend
bEnd = True: iPos = ActiveDocument.StoryRanges(1).End
X1: For i = 1 To nCol ' iCol(0) = high peak
If iCol(0) iCol(i) Then iCol(0) = iCol(i)
Next i
iCol(nCol + 1) = iCol(0) ' iCol(nCol + 1) = low peak
For i = 1 To nCol
If iCol(nCol + 1) iCol(i) Then iCol(nCol + 1) = iCol(i)
Next i
If iCol(0) - iCol(nCol + 1) MaxDiff Then
.SetRange iPosCol, iPos
Application.ScreenUpdating = True
ColumnDiff = CCur(iCol(0) - iCol(i)) ' & "pt"
Exit Function
End If
If bEnd Then GoTo X3 Else GoTo X2
X0: .GoToNext wdGoToLine
iCounter = iCounter + 1: StatusBar = iCounter
Wend
End With
X3: myRange.Select
Application.ScreenUpdating = True: ActiveWindow.View.Type = iViewType
MsgBox "Done!"

End Function

-------------------


LIMITATIONS OF THE FUNCTION (NOT PROBLEMS!)
1. The function will only find the difference in the main text and no
in footnotes etc.
2. The function starts searching from the cursor location (or the end o
the selected text) till the end of the document.


RELATED QUESTION
http://tinyurl.com/7ju2puy


At the above url Macropad MVP has suggested several alternatives, a
mentioned there either the macro was too slow or I was not able to ge
it to work in right-to-left format
 
S

Suzanne S. Barnhill

Columns will be balanced if you insert a Continuous section break at the end
of the multi-column section.

--
Suzanne S. Barnhill
Microsoft MVP (Word)
Words into Type
Fairhope, Alabama USA
http://word.mvps.org
 
M

moishy

Suzanne

I do that, but it will not balance the columns accurately if one colum
has more lines than the other, or if one column has more paragraphs tha
the other and spacing is used before or after the paragraphs

I use macros kindly provided at http://tinyurl.com/7ju2pu
Columns will be balanced if you insert a Continuous section break at th
end
of the multi-column section

--
Suzanne S. Barnhil
Microsoft MVP (Word
Words into Typ
Fairhope, Alabama US
http://word.mvps.or


in message

I've posted a question on http://tinyurl.com/6mflczk but it ha
seemingly come to a dead end (i.e. no response)

Here's the issue I'm dealing with, page layout in multi-colum
documents, since Word is not a desktop publishing solution, it doesn'
have a built-in option to align all columns equally at the bottom, an
therefore I have to do it manually. I'm using a function to find th
difference in points between two columns, the trouble is it doesn'
always work, sometimes it will return a value of several hundred point
when there hardly is a difference at all

I'm posting the function here; I would appreciate any help I can get i
solving the mystery, and or improve the function

Please note
a. Although I will appreciate any help including alternativ
suggestions, I would prefer if I can get some help with the functio
I'
currently using
b. The function must work on a right-to-left forma
document
c. Speed is a very important factor, as I plan to us
the function to display the difference in a text box on a user for
tha
will get updated every time a change is made to one of the columns


Code
-------------------

Function ColumnDiff(

Dim i As Integer, iCounter As Integer, iPos As Long, iPosCol As Lon
Dim iCol() As Currency, nCol As Intege
Dim myRange As Range, iViewType As Integer, bEnd As Boolea

Const MaxDiff = 0 ' difference (in points) for the function to ignor

If Selection.StoryType 1 Then MsgBox "Cursor not in main text!": Exi

Functio
Set myRange = Selection.Rang
Application.ScreenUpdating = Fals
iViewType = ActiveWindow.View.Type: ActiveWindow.View.Type
wdPrintVie
iPos = -
With Selectio
.Collapse wdCollapseEn
iCounter = iCounter + 1: StatusBar = iCounte
While iPos .Star
X2: iPos = .Star
If Dialogs(wdDialogFormatColumns).Columns = 1 Then GoTo X
ReDim iCol(Dialogs(wdDialogFormatColumns).Columns + 1
iPosCol = iPos: iPos = iPos - 1: nCol =
While iPos .Star
iPos = .Star
If Dialogs(wdDialogFormatColumns).Columns = 1
Or Dialogs(wdDialogFormatColumns).ColumnNo nCol
Then GoTo X
nCol = Dialogs(wdDialogFormatColumns).ColumnN
iCol(nCol) = .Information(wdVerticalPositionRelativeToPage
.GoToNext wdGoToLin
iCounter = iCounter + 1: StatusBar = iCounte
Wen
bEnd = True: iPos = ActiveDocument.StoryRanges(1).En
X1: For i = 1 To nCol ' iCol(0) = high pea
If iCol(0) iCol(i) Then iCol(0) = iCol(i
Next
iCol(nCol + 1) = iCol(0) ' iCol(nCol + 1) = low pea
For i = 1 To nCo
If iCol(nCol + 1) iCol(i) Then iCol(nCol + 1) = iCol(i
Next
If iCol(0) - iCol(nCol + 1) MaxDiff The
.SetRange iPosCol, iPo
Application.ScreenUpdating = Tru
ColumnDiff = CCur(iCol(0) - iCol(i)) ' & "pt
Exit Functio
End I
If bEnd Then GoTo X3 Else GoTo X
X0: .GoToNext wdGoToLin
iCounter = iCounter + 1: StatusBar = iCounte
Wen
End Wit
X3: myRange.Selec
Application.ScreenUpdating = True: ActiveWindow.View.Type = iViewTyp
MsgBox "Done!

End Functio

-------------------


LIMITATIONS OF THE FUNCTION (NOT PROBLEMS!)
1. The function will only find the difference in the main text and no
in footnotes etc
2. The function starts searching from the cursor location (or the en
o
the selected text) till the end of the document


RELATED QUESTION
http://tinyurl.com/7ju2pu


At the above url Macropad MVP has suggested several alternatives, a
mentioned there either the macro was too slow or I was not able to get
it to work in right-to-left format.
[/QUOTE]
 
S

Stefan Blom

Actually, Word does a fairly good job balancing columns when the column ends
in a continuous section break. But note that it is not going to work if the
columns contain a manual break somewhere.

However, if you are saying that you want the lines to match exactly (across
columns), you will have to specify a fixed value for line spacing, and a
value for spacing before which is an integer multiple of the line spacing.

-- 
Stefan Blom
Microsoft Word MVP




---------------------------------------------
"moishy" wrote in message

Suzanne,

I do that, but it will not balance the columns accurately if one column
has more lines than the other, or if one column has more paragraphs than
the other and spacing is used before or after the paragraphs.

I use macros kindly provided at http://tinyurl.com/7ju2puy
Columns will be balanced if you insert a Continuous section break at the
end
of the multi-column section.

--
Suzanne S. Barnhill
Microsoft MVP (Word)
Words into Type
Fairhope, Alabama USA
http://word.mvps.org


in message

I've posted a question on http://tinyurl.com/6mflczk but it has
seemingly come to a dead end (i.e. no response).

Here's the issue I'm dealing with, page layout in multi-column
documents, since Word is not a desktop publishing solution, it doesn't
have a built-in option to align all columns equally at the bottom, and
therefore I have to do it manually. I'm using a function to find the
difference in points between two columns, the trouble is it doesn't
always work, sometimes it will return a value of several hundred points
when there hardly is a difference at all.

I'm posting the function here; I would appreciate any help I can get in
solving the mystery, and or improve the function.

Please note:
a. Although I will appreciate any help including alternative
suggestions, I would prefer if I can get some help with the function
I'm
currently using.
b. The function must work on a right-to-left format
document.
c. Speed is a very important factor, as I plan to use
the function to display the difference in a text box on a user form
that
will get updated every time a change is made to one of the columns.


Code:
--------------------

Function ColumnDiff()

Dim i As Integer, iCounter As Integer, iPos As Long, iPosCol As Long
Dim iCol() As Currency, nCol As Integer
Dim myRange As Range, iViewType As Integer, bEnd As Boolean

Const MaxDiff = 0 ' difference (in points) for the function to ignore

If Selection.StoryType 1 Then MsgBox "Cursor not in main text!": Exit

Function
Set myRange = Selection.Range
Application.ScreenUpdating = False
iViewType = ActiveWindow.View.Type: ActiveWindow.View.Type =
wdPrintView
iPos = -1
With Selection
.Collapse wdCollapseEnd
iCounter = iCounter + 1: StatusBar = iCounter
While iPos .Start
X2: iPos = .Start
If Dialogs(wdDialogFormatColumns).Columns = 1 Then GoTo X0
ReDim iCol(Dialogs(wdDialogFormatColumns).Columns + 1)
iPosCol = iPos: iPos = iPos - 1: nCol = 0
While iPos .Start
iPos = .Start
If Dialogs(wdDialogFormatColumns).Columns = 1 _
Or Dialogs(wdDialogFormatColumns).ColumnNo nCol _
Then GoTo X1
nCol = Dialogs(wdDialogFormatColumns).ColumnNo
iCol(nCol) = .Information(wdVerticalPositionRelativeToPage)
.GoToNext wdGoToLine
iCounter = iCounter + 1: StatusBar = iCounter
Wend
bEnd = True: iPos = ActiveDocument.StoryRanges(1).End
X1: For i = 1 To nCol ' iCol(0) = high peak
If iCol(0) iCol(i) Then iCol(0) = iCol(i)
Next i
iCol(nCol + 1) = iCol(0) ' iCol(nCol + 1) = low peak
For i = 1 To nCol
If iCol(nCol + 1) iCol(i) Then iCol(nCol + 1) = iCol(i)
Next i
If iCol(0) - iCol(nCol + 1) MaxDiff Then
.SetRange iPosCol, iPos
Application.ScreenUpdating = True
ColumnDiff = CCur(iCol(0) - iCol(i)) ' & "pt"
Exit Function
End If
If bEnd Then GoTo X3 Else GoTo X2
X0: .GoToNext wdGoToLine
iCounter = iCounter + 1: StatusBar = iCounter
Wend
End With
X3: myRange.Select
Application.ScreenUpdating = True: ActiveWindow.View.Type = iViewType
MsgBox "Done!"

End Function

--------------------


LIMITATIONS OF THE FUNCTION (NOT PROBLEMS!):
1. The function will only find the difference in the main text and not
in footnotes etc.
2. The function starts searching from the cursor location (or the end
of
the selected text) till the end of the document.


RELATED QUESTION:
http://tinyurl.com/7ju2puy


At the above url Macropad MVP has suggested several alternatives, as
mentioned there either the macro was too slow or I was not able to get
it to work in right-to-left format.
[/QUOTE]
 
M

moishy

Stefan,

Ideally your suggestion of using fixed line spacing is the right way t
go in setting up a new document, the trouble is I'm dealing with man
documents from many sources which cannot be counted upon to set up th
document properly.
Also, your suggestion won't help in case of a one line longer paragrap
;492085']Actually, Word does a fairly good job balancing columns whe
the column ends
in a continuous section break. But note that it is not going to work i
the
columns contain a manual break somewhere.

However, if you are saying that you want the lines to match exactl
(across
columns), you will have to specify a fixed value for line spacing, and

value for spacing before which is an integer multiple of the lin
spacing.

-- 
Stefan Blom
Microsoft Word MVP




---------------------------------------------
"moishy" wrote in message

Suzanne,

I do that, but it will not balance the columns accurately if one column
has more lines than the other, or if one column has more paragraph
than
the other and spacing is used before or after the paragraphs.

I use macros kindly provided at http://tinyurl.com/7ju2puy

Suzanne S. Barnhill;492068 Wrote:-
Columns will be balanced if you insert a Continuous section break a
the
end
of the multi-column section.

--
Suzanne S. Barnhill
Microsoft MVP (Word)
Words into Type
Fairhope, Alabama USA
http://word.mvps.org


in message

I've posted a question on http://tinyurl.com/6mflczk but it has
seemingly come to a dead end (i.e. no response).

Here's the issue I'm dealing with, page layout in multi-column
documents, since Word is not a desktop publishing solution, it doesn't
have a built-in option to align all columns equally at the bottom, and
therefore I have to do it manually. I'm using a function to find the
difference in points between two columns, the trouble is it doesn't
always work, sometimes it will return a value of several hundre
points
when there hardly is a difference at all.

I'm posting the function here; I would appreciate any help I can ge
in
solving the mystery, and or improve the function.

Please note:
a. Although I will appreciate any help including alternative
suggestions, I would prefer if I can get some help with the function
I'm
currently using.
b. The function must work on a right-to-left format
document.
c. Speed is a very important factor, as I plan to use
the function to display the difference in a text box on a user form
that
will get updated every time a change is made to one of the columns.


Code:
--------------------

Function ColumnDiff()

Dim i As Integer, iCounter As Integer, iPos As Long, iPosCol As Long
Dim iCol() As Currency, nCol As Integer
Dim myRange As Range, iViewType As Integer, bEnd As Boolean

Const MaxDiff = 0 ' difference (in points) for the function to ignore

If Selection.StoryType 1 Then MsgBox "Cursor not in main text!": Exit

Function
Set myRange = Selection.Range
Application.ScreenUpdating = False
iViewType = ActiveWindow.View.Type: ActiveWindow.View.Type =
wdPrintView
iPos = -1
With Selection
.Collapse wdCollapseEnd
iCounter = iCounter + 1: StatusBar = iCounter
While iPos .Start
X2: iPos = .Start
If Dialogs(wdDialogFormatColumns).Columns = 1 Then GoTo X0
ReDim iCol(Dialogs(wdDialogFormatColumns).Columns + 1)
iPosCol = iPos: iPos = iPos - 1: nCol = 0
While iPos .Start
iPos = .Start
If Dialogs(wdDialogFormatColumns).Columns = 1 _
Or Dialogs(wdDialogFormatColumns).ColumnNo nCol _
Then GoTo X1
nCol = Dialogs(wdDialogFormatColumns).ColumnNo
iCol(nCol) = .Information(wdVerticalPositionRelativeToPage)
.GoToNext wdGoToLine
iCounter = iCounter + 1: StatusBar = iCounter
Wend
bEnd = True: iPos = ActiveDocument.StoryRanges(1).End
X1: For i = 1 To nCol ' iCol(0) = high peak
If iCol(0) iCol(i) Then iCol(0) = iCol(i)
Next i
iCol(nCol + 1) = iCol(0) ' iCol(nCol + 1) = low peak
For i = 1 To nCol
If iCol(nCol + 1) iCol(i) Then iCol(nCol + 1) = iCol(i)
Next i
If iCol(0) - iCol(nCol + 1) MaxDiff Then
.SetRange iPosCol, iPos
Application.ScreenUpdating = True
ColumnDiff = CCur(iCol(0) - iCol(i)) ' & "pt"
Exit Function
End If
If bEnd Then GoTo X3 Else GoTo X2
X0: .GoToNext wdGoToLine
iCounter = iCounter + 1: StatusBar = iCounter
Wend
End With
X3: myRange.Select
Application.ScreenUpdating = True: ActiveWindow.View.Type = iViewType
MsgBox "Done!"

End Function

--------------------


LIMITATIONS OF THE FUNCTION (NOT PROBLEMS!):
1. The function will only find the difference in the main text and not
in footnotes etc.
2. The function starts searching from the cursor location (or the end
of
the selected text) till the end of the document.


RELATED QUESTION:
http://tinyurl.com/7ju2puy


At the above url Macropad MVP has suggested several alternatives, as
mentioned there either the macro was too slow or I was not able to get
it to work in right-to-left format.
[/QUOTE]
 
S

Stefan Blom

The underlying problem is that Word doesn't support "registry-true"
layout. However, if all text (body text as well as headings) have the
same, fixed, line spacing and spacing before set to an integer multiple
of the spacing, you'll get the best that can be accomplished in Word.

--
Stefan Blom
Microsoft Word MVP



Stefan,

Ideally your suggestion of using fixed line spacing is the right way to
go in setting up a new document, the trouble is I'm dealing with many
documents from many sources which cannot be counted upon to set up the
document properly.
Also, your suggestion won't help in case of a one line longer paragraph
;492085']Actually, Word does a fairly good job balancing columns when
the column ends
in a continuous section break. But note that it is not going to work if
the
columns contain a manual break somewhere.

However, if you are saying that you want the lines to match exactly
(across
columns), you will have to specify a fixed value for line spacing, and a

value for spacing before which is an integer multiple of the line
spacing.

-- 
Stefan Blom
Microsoft Word MVP




---------------------------------------------
"moishy" wrote in message

Suzanne,

I do that, but it will not balance the columns accurately if one column
has more lines than the other, or if one column has more paragraphs
than
the other and spacing is used before or after the paragraphs.

I use macros kindly provided at http://tinyurl.com/7ju2puy

Suzanne S. Barnhill;492068 Wrote:-
Columns will be balanced if you insert a Continuous section break at
the
end
of the multi-column section.

--
Suzanne S. Barnhill
Microsoft MVP (Word)
Words into Type
Fairhope, Alabama USA
http://word.mvps.org


in message

I've posted a question on http://tinyurl.com/6mflczk but it has
seemingly come to a dead end (i.e. no response).

Here's the issue I'm dealing with, page layout in multi-column
documents, since Word is not a desktop publishing solution, it doesn't
have a built-in option to align all columns equally at the bottom, and
therefore I have to do it manually. I'm using a function to find the
difference in points between two columns, the trouble is it doesn't
always work, sometimes it will return a value of several hundred
points
when there hardly is a difference at all.

I'm posting the function here; I would appreciate any help I can get
in
solving the mystery, and or improve the function.

Please note:
a. Although I will appreciate any help including alternative
suggestions, I would prefer if I can get some help with the function
I'm
currently using.
b. The function must work on a right-to-left format
document.
c. Speed is a very important factor, as I plan to use
the function to display the difference in a text box on a user form
that
will get updated every time a change is made to one of the columns.


Code:
--------------------

Function ColumnDiff()

Dim i As Integer, iCounter As Integer, iPos As Long, iPosCol As Long
Dim iCol() As Currency, nCol As Integer
Dim myRange As Range, iViewType As Integer, bEnd As Boolean

Const MaxDiff = 0 ' difference (in points) for the function to ignore

If Selection.StoryType 1 Then MsgBox "Cursor not in main text!": Exit

Function
Set myRange = Selection.Range
Application.ScreenUpdating = False
iViewType = ActiveWindow.View.Type: ActiveWindow.View.Type =
wdPrintView
iPos = -1
With Selection
.Collapse wdCollapseEnd
iCounter = iCounter + 1: StatusBar = iCounter
While iPos .Start
X2: iPos = .Start
If Dialogs(wdDialogFormatColumns).Columns = 1 Then GoTo X0
ReDim iCol(Dialogs(wdDialogFormatColumns).Columns + 1)
iPosCol = iPos: iPos = iPos - 1: nCol = 0
While iPos .Start
iPos = .Start
If Dialogs(wdDialogFormatColumns).Columns = 1 _
Or Dialogs(wdDialogFormatColumns).ColumnNo nCol _
Then GoTo X1
nCol = Dialogs(wdDialogFormatColumns).ColumnNo
iCol(nCol) = .Information(wdVerticalPositionRelativeToPage)
.GoToNext wdGoToLine
iCounter = iCounter + 1: StatusBar = iCounter
Wend
bEnd = True: iPos = ActiveDocument.StoryRanges(1).End
X1: For i = 1 To nCol ' iCol(0) = high peak
If iCol(0) iCol(i) Then iCol(0) = iCol(i)
Next i
iCol(nCol + 1) = iCol(0) ' iCol(nCol + 1) = low peak
For i = 1 To nCol
If iCol(nCol + 1) iCol(i) Then iCol(nCol + 1) = iCol(i)
Next i
If iCol(0) - iCol(nCol + 1) MaxDiff Then
.SetRange iPosCol, iPos
Application.ScreenUpdating = True
ColumnDiff = CCur(iCol(0) - iCol(i)) '& "pt"
Exit Function
End If
If bEnd Then GoTo X3 Else GoTo X2
X0: .GoToNext wdGoToLine
iCounter = iCounter + 1: StatusBar = iCounter
Wend
End With
X3: myRange.Select
Application.ScreenUpdating = True: ActiveWindow.View.Type = iViewType
MsgBox "Done!"

End Function

--------------------


LIMITATIONS OF THE FUNCTION (NOT PROBLEMS!):
1. The function will only find the difference in the main text and not
in footnotes etc.
2. The function starts searching from the cursor location (or the end
of
the selected text) till the end of the document.


RELATED QUESTION:
http://tinyurl.com/7ju2puy


At the above url Macropad MVP has suggested several alternatives, as
mentioned there either the macro was too slow or I was not able to get
it to work in right-to-left format.
[/QUOTE]
 
M

moishy

Any insights on the function I posted?
'Stefan Blom[_3_ said:
;492105']The underlying problem is that Word doesn't suppor
"registry-true"
layout. However, if all text (body text as well as headings) have the
same, fixed, line spacing and spacing before set to an integer multipl

of the spacing, you'll get the best that can be accomplished in Word.
 
S

Stefan Blom

For assistance with the VBA code, you should ask in a programming group or
forum.

-- 
Stefan Blom
Microsoft Word MVP




---------------------------------------------
"moishy" wrote in message

Any insights on the function I posted?
'Stefan Blom[_3_ said:
;492105']The underlying problem is that Word doesn't support
"registry-true"
layout. However, if all text (body text as well as headings) have the
same, fixed, line spacing and spacing before set to an integer multiple

of the spacing, you'll get the best that can be accomplished in Word.
 
H

handeiere

'Stefan Blom[_3_ said:
;492167']For assistance with the VBA code, you should ask in
programming group or
forum

--
Stefan Blo
Microsoft Word MV




--------------------------------------------
"moishy" wrote in message

Any insights on the function I posted
'Stefan Blom[_3_ Wrote:
;492105']The underlying problem is that Word doesn't suppor
"registry-true
layout. However, if all text (body text as well as headings) have th
same, fixed, line spacing and spacing before set to an integer multipl

of the spacing, you'll get the best that can be accomplished in Word

-
Stefan Blo
Microsoft Word MV
you are replying, so newsreaders can interpret them correctly
[image: http://www.bosin.info/g.gif
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top