Home |
Search |
Today's Posts |
#1
![]() |
|||
|
|||
![]()
I've posted a question on http://social.msdn.microsoft.com/For...1-1d39f5219b33 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 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://social.msdn.microsoft.com/For...7-2dec56a1313c 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. |
#2
![]()
Posted to microsoft.public.word.pagelayout
|
|||
|
|||
![]()
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 "moishy" wrote 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. -- moishy |
#3
![]() |
|||
|
|||
![]()
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 Quote:
|
#4
![]()
Posted to microsoft.public.word.pagelayout
|
|||
|
|||
![]()
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 "moishy" wrote 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. -- moishy [/i][/color] -- moishy |
#5
![]() |
|||
|
|||
![]()
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 on one side. Quote:
|
#6
![]()
Posted to microsoft.public.word.pagelayout
|
|||
|
|||
![]()
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 On 2012-03-14 07:45 (GMT+1), moishy wrote: 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 on one side. 'Stefan Blom[_3_ Wrote: ;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 "moishy" wrote 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. -- moishy - -- moishy [/i][/color] |
#7
![]() |
|||
|
|||
![]()
Any insights on the function I posted?
Quote:
|
#8
![]()
Posted to microsoft.public.word.pagelayout
|
|||
|
|||
![]()
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_ Wrote: ;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. -- Stefan Blom Microsoft Word MVP -- moishy |
#9
![]() |
|||
|
|||
![]() Quote:
![]() Last edited by handeiere : April 11th 12 at 11:02 AM |
Reply |
Thread Tools | |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Multi-column pages. Need to leave 3rd column blank | Microsoft Word Help | |||
Embedding Multi-page Documents | Microsoft Word Help | |||
On 2 column page layout can I put page numbers on each column | Microsoft Word Help | |||
Breaking up multi-page document into several documents | Microsoft Word Help | |||
multi page layout document questions | Page Layout |