שיתוף | יישור טורים מאקרו חדש!!!
-
@רפרם-ב-ר-פפא
אם יש 2 טורים בראש העמוד, כותרת באמצע העמוד על פני כל הרוחב ואח"כ שוב 2 טורים, המאקרו מסדר רק את הטורים שאחרי הכותרת ולא את הטורים שלפני הכותרת. -
@mfmf גם ביישר את כל המסמך או רק ביישר עמוד זה
כי ביישר עמוד זה בנוי שיישר את החלק שבו נמצא הסמן ולכן אם ברצונך ליישר את שני החלקים הפעל את המאקרו יישור עמוד פעת אחת לפני הכותרת ופעם אחת אחרי (והוא בדווקא לא מיישר את שני החלקים כדי שאם ברצונך לסדר את כל הענין עד הכותרת לפני שסיימת לערוך ולתקן את הסימן הבא לדגומא וכך לא ישבש את המרווחים בקטע הלא מוכן)
בתודה על ההארה תתקן אותי אם יש עדיין באג -
@רפרם-ב-ר-פפא ביישר עמוד זה, עובד מצויין לפי מקום הסמן, ביישר כל המסמך זה מיישר רק את הטורים למטה.
-
בסייעתא דשמיא
עדכון המאקרו יישור טורים - תוספות ותיקונים
בהמשך להערות וההארות שנכתבו בשרשור זה בסייעתא דשמיא הנני להציע לציבור היקר את מאקרו יישור טורים גרסה 3
א.סודר ענין השגיאה של מרווח פחות מ0
וכמו כן נקבע שמרווח בין פסקאות לא יוכל לחרוג מטווח של 2.5 נקודות מינימום ו25 נקודת מקסימום (וזה לצורך הנראות הבסיסית) ונוסף גם שכשלא מצליח בטור הראשון (שהוא רב בפסקאות לעומת השני) מנסה בטור השני (ואם בשני טורים לא עומד בכללים אז ביישור מסמך שלם או מספר עמודים מדלג באופן אוטומטי לעמוד הבא וביישור עמוד אחד מודיע שלא עומד בכללים שהוצבו)
ב. כמו כן מדלג על מסגרות ותיבות טקסט
(ג. כמו כן מאחר שהוגדר מינימום 2.5 נקודות ממילא לא תהיה בעיה של עובי כתב בכותרת)
ד. נוסף פקודה יישור ממיקום הסמן עד סוף כל המסמך (וטוב במקרה של באג וכו לדלג על המקום הבעייתי)
ה. נוסף פקודה ליישור מכותרת על טור 1 עד כותרת הבאה (דהיינו סימן אחד בקונטרס)
ו. ביישור כל המסמך במקרה שיש כותרת באמצע עמוד מיישר גם את החלק העליון וגם את התחתון
בהצלחה
ואשמח לשמוע אם עובד כמצופה וכן על באגים שלא יהיו וכן הצעות ייעול
נראה שהוא דבר שיכול להועיל להרבה משתמשים ולחסוך זמן לכן אני מקווה לעשות כתוסף לכשיהיה מושלם
וכן בכוונתי להוסיף אפשרות להגדיר את הטווח מינימום ומקסימום ועוד בל"נ
הכל בעזרתו יתברך ובישועתו
מצ"ב הקובץיישור טורים 3.dotm ועודכן בפוסט הראשיוהקוד המתוקן והמשופץ
ליישור עמוד אחדDim WRange, Endcol2, Startcol1, Rcol1, Rcol2 As Range Dim NumLines, WPage, Pcol1, Pcol2, APcol, PPS, a, i, B, C, LM, P, S, V, col1, col2, Acol, Ignore As Double Public Sub יישור_טורים_עמוד_זה() 'בודק אם יש שני טורים If Selection.PageSetup.TextColumns.Count <> 2 Then MsgBox ("לא נמצאו 2 טורים"): Exit Sub 'עדכון מסך שקר Application.ScreenUpdating = False Dim WRange, Endcol2, Startcol1, Rcol1, Rcol2 As Range Dim NumLines, WPage, Pcol1, Pcol2, APcol, PPS, a, i, B, C, LM, P, S, V, col1, col2, Acol, Ignore As Double 'שומר תחילת שורה של מיקום נוכחי Selection.HomeKey Unit:=wdLine Set My = Selection.Range 'בחר את כל העמוד Set WRange = ActiveDocument.Bookmarks("\page").Range 'עובר לתחילת עמוד WRange.SetRange Start:=WRange.Start, End:=WRange.Start + 1 WRange.Select Set Startpage = Selection.Range WRange.SetRange Start:=Startpage.End, End:=My.End 'סופר שורות WRange.Select SLines = Selection.Range.ComputeStatistics(wdStatisticLines) 'חוזר ומפעיל לולאת בדיקה שאין כותרת' My.Select 'Startcol1 מגדיר תחילת טור 1 Set Startcol1 = Selection.Range For S = 1 To SLines - 1 Selection.GoTo What:=wdGoToLine, Which:=wdGoToPrevious, Count:=1, Name:="" If Selection.PageSetup.TextColumns.Count <> 2 Then Exit For Else Set Startcol1 = Selection.Range End If Next 'סוף עמוד Set WRange = ActiveDocument.Bookmarks("\page").Range WRange.SetRange Start:=WRange.End - 1, End:=WRange.End WRange.Select Set Endpage = Selection.Range WRange.SetRange Start:=My.Start, End:=Endpage.End 'סופר שורות WRange.Select ELines = Selection.Range.ComputeStatistics(wdStatisticLines) My.Select 'Endcol2 מגדיר סוף טור 2 Set Endcol2 = Selection.Range For S = 1 To ELines - 1 Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=1, Name:="" If Selection.PageSetup.TextColumns.Count <> 2 Then Exit For Else Set Endcol2 = Selection.Range End If Next 'מספר שורות כולל שני טורים Set WRange = Selection.Range WRange.SetRange Start:=Startcol1.End, End:=Endcol2.End WRange.Select NumLines = Selection.Range.ComputeStatistics(wdStatisticLines) ' - col2 מגדיר גובה טור 2 Endcol2.Select col2 = Endcol2.Information(wdVerticalPositionRelativeToPage) Selection.EndKey Unit:=wdLine Set Endcol2 = Selection.Range ' col1מגדיר גובה טור =1 'Endcol1= סוף טור 1 'Startcol2= תחילת טור2 Startcol1.Select For i = 1 To NumLines Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=1, Name:="" If col1 > Selection.Information(wdVerticalPositionRelativeToPage) Then Set Startcol2 = Selection.Range Exit For Else col1 = Selection.Information(wdVerticalPositionRelativeToPage) Set Endcol1 = Selection.Range End If Next 'סוף טור 1 = סוף שורה Endcol1.Select Selection.EndKey Unit:=wdLine Set Endcol1 = Selection.Range 'Acol= מגדיר הפרש בין טורים If col1 > col2 Then Acol = col1 - col2 If col1 < col2 Then Acol = col2 - col1 'בודק אם טורים ישרים If Acol < 0.05 Then MsgBox "טורים ישרים" 'אם רווח גדול מידי מוסיף בסוף פסקה מעבר מקטע בטור 1 ElseIf Acol > 30 Then Endcol2.Select ActiveDocument.Range(Start:=Selection.Start, End:=Selection.Start). _ InsertBreak Type:=wdSectionBreakContinuous Selection.Start = Selection.Start + 1 ActiveDocument.Range(Start:=Selection.End, End:=Selection.End).InsertBreak _ Type:=wdSectionBreakContinuous With Selection.PageSetup.TextColumns .SetCount NumColumns:=1 .EvenlySpaced = True .LineBetween = False End With Else 'Pcol1 = מספר פסקאות טור 1 WRange.SetRange Start:=Startcol1.Start, End:=Endcol1.End - 2 WRange.Select Set Rcol1 = Selection.Range Rcol1.Select Pcol1 = (Rcol1.ComputeStatistics(wdStatisticParagraphs)) 'Pcol2 = מספר פסקאות טור 2 WRange.SetRange Start:=Startcol2.Start, End:=Endcol2.End - 2 WRange.Select Set Rcol2 = Selection.Range Rcol2.Select Pcol2 = (Rcol2.ComputeStatistics(wdStatisticParagraphs)) 'טור מרובה פסקאות If Pcol1 > Pcol2 Then 'עורך טור1 ' PPS - מחלק הפרש בין פסקאות PPS = Acol / Pcol1 'עבור לשורה ראשונה בטור Startcol1.Select ' 'אם טור 1 ארוך מ2 If col1 > col2 Then 'בודק אם רווח לא קטן מ2.5 If SpaceAfter - PPS > 2.5 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol1 'מקטין רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter - PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עורך טור 2 Else If Pcol2 = 0 Then 'אחרת עובר עמוד Endcol2.Select Selection.MoveDown wdParagraph, 1 MsgBox ("לא עומד בקרטיונים שנקבעו נא נסה לערוך ידנית") Else PPS = Acol / Pcol2 'עבור לשורה ראשונה בטור 2 Startcol2.Select 'בודק אם רווח לא גדול מ25 If SpaceAfter + PPS < 25 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol2 'מוסיף רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter + PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עובר עמוד Else 'עבור לפסקה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 MsgBox ("לא עומד בקרטיונים שנקבעו נא נסה לערוך ידנית") End If End If End If 'אם טור 2 ארוך מ1 ElseIf col1 < col2 Then 'בודק אם רווח לא גדול מ25 If SpaceAfter + PPS < 25 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol1 'מוסיף רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter + PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת שרווח יהיה גדול מ25 עורך טור 2 Else If Pcol2 = 0 Then 'אחרת עובר עמוד Endcol2.Select Selection.MoveDown wdParagraph, 1 MsgBox ("לא עומד בקרטיונים שנקבעו נא נסה לערוך ידנית") Else PPS = Acol / Pcol2 'עבור לשורה ראשונה בטור 2 Startcol2.Select 'בודק אם רווח לא קטן מ2.5 If SpaceAfter - PPS > 2.5 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol2 'מקטין רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter - PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עובר עמוד Else 'עבור לפסקה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 MsgBox ("לא עומד בקרטיונים שנקבעו נא נסה לערוך ידנית") End If End If End If End If 'אם טור 2 רב פסקאות או שווה ElseIf Pcol2 > Pcol1 Or Pcol2 = Pcol1 Then 'עורך טור 2 'מחלק הפרש בין פסקאות PPS = Acol / Pcol2 'עבור לשורה ראשונה בטור 2 Startcol2.Select 'אם טור 1 ארוך מ2 If col1 > col2 Then 'בודק אם רווח לא גדול מ25 If SpaceAfter + PPS < 25 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol2 'מוסיף רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter + PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עורך טור 1 Else If Pcol1 = 0 Then 'אחרת עובר עמוד Endcol2.Select Selection.MoveDown wdParagraph, 1 MsgBox ("לא עומד בקרטיונים שנקבעו נא נסה לערוך ידנית") Else ' PPS - מחלק הפרש בין פסקאות PPS = Acol / Pcol1 'עבור לשורה ראשונה בטור Startcol1.Select 'בודק אם רווח לא קטן מ2.5 If SpaceAfter - PPS > 2.5 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol1 'מקטין רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter - PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עובר עמוד Else 'עבור לפסקה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 MsgBox ("לא עומד בקרטיונים שנקבעו נא נסה לערוך ידנית") End If End If End If 'אם טור 2 ארוך מ1 ElseIf col2 > col1 Then 'בודק אם רווח לא קטן מ2.5 If SpaceAfter - PPS > 2.5 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol2 'מקטין רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter - PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עורך טור 1 Else If Pcol1 = 0 Then 'אחרת עובר עמוד Endcol2.Select Selection.MoveDown wdParagraph, 1 MsgBox ("לא עומד בקרטיונים שנקבעו נא נסה לערוך ידנית") Else ' PPS - מחלק הפרש בין פסקאות PPS = Acol / Pcol1 'עבור לשורה ראשונה בטור Startcol1.Select 'בודק אם רווח לא גדול מ25 If SpaceAfter + PPS < 25 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol1 'מגדיל רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter + PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עובר עמוד Else 'עבור לפסקה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 MsgBox ("לא עומד בקרטיונים שנקבעו נא נסה לערוך ידנית") End If End If End If End If End If End If My.Select Application.ScreenUpdating = True End Sub
ליישור כל המסמך
Dim WRange, Endcol1, Startcol1, Endcol2, Startcol2, Rcol1, Rcol2 As Range Dim NumLines, WPage, Pcol1, Pcol2, APcol, PPS, a, i, B, C, P, R, S, G, col1, col2, Acol, Ignore As Double Public Sub יישור_טורים_בכל_המסמך_חדש() 'עדכון מסך שקר Application.ScreenUpdating = False 'מספר פסקאות 'תחילה בסוף מסמך מוסיף תו כטור 1 Selection.WholeStory Set Whole = Selection.Range Whole.SetRange Start:=Whole.End, End:=Whole.End Whole.Select If Selection.PageSetup.TextColumns.Count = 2 Then ActiveDocument.Range(Start:=Selection.Start, End:=Selection.Start). _ InsertBreak Type:=wdSectionBreakContinuous Selection.Start = Selection.Start + 1 ActiveDocument.Range(Start:=Selection.End, End:=Selection.End).InsertBreak _ Type:=wdSectionBreakContinuous With Selection.PageSetup.TextColumns .SetCount NumColumns:=1 .EvenlySpaced = True .LineBetween = False End With Else End If 'עובר לפסקה ראשונה ActiveDocument.Paragraphs(1).Range.Select 'נכנס לללואה על כל המסמך For R = 1 To ActiveDocument.Paragraphs.Count / 3 'בודק אם יש שני טורים If Selection.PageSetup.TextColumns.Count = 2 Then Application.Run MacroName:="עורך_טורים" Else Selection.MoveDown wdParagraph, 1 End If Next R Application.ScreenUpdating = True End Sub Public Sub עורך_טורים() 'עדכון מסך שקר Application.ScreenUpdating = False Dim WRange, Endcol2, Startcol1, Rcol1, Rcol2 As Range Dim NumLines, WPage, Pcol1, Pcol2, APcol, PPS, LM, a, i, B, C, P, S, col1, col2, Acol, Ignore As Double 'שומר תחילת שורה של מיקום נוכחי Selection.HomeKey Unit:=wdLine Set My = Selection.Range 'בחר את כל העמוד Set WRange = ActiveDocument.Bookmarks("\page").Range 'עובר לתחילת עמוד WRange.SetRange Start:=WRange.Start, End:=WRange.Start + 1 WRange.Select Set Startpage = Selection.Range WRange.SetRange Start:=Startpage.End, End:=My.End 'סופר שורות WRange.Select SLines = Selection.Range.ComputeStatistics(wdStatisticLines) 'חוזר ומפעיל לולאת בדיקה שאין כותרת' My.Select 'Startcol1 מגדיר תחילת טור 1 Set Startcol1 = Selection.Range For S = 1 To SLines - 1 Selection.GoTo What:=wdGoToLine, Which:=wdGoToPrevious, Count:=1, Name:="" If Selection.PageSetup.TextColumns.Count <> 2 Then Exit For Else Set Startcol1 = Selection.Range End If Next 'סוף עמוד Set WRange = ActiveDocument.Bookmarks("\page").Range WRange.SetRange Start:=WRange.End - 1, End:=WRange.End WRange.Select Set Endpage = Selection.Range WRange.SetRange Start:=My.Start, End:=Endpage.End 'סופר שורות WRange.Select ELines = Selection.Range.ComputeStatistics(wdStatisticLines) My.Select 'Endcol2מגדיר סוף טור 2 Set Endcol2 = Selection.Range For S = 1 To ELines - 1 Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=1, Name:="" If Selection.PageSetup.TextColumns.Count <> 2 Then Exit For Else Set Endcol2 = Selection.Range End If Next 'מספר שורות כולל שני טורים Set WRange = Selection.Range WRange.SetRange Start:=Startcol1.End, End:=Endcol2.End WRange.Select NumLines = Selection.Range.ComputeStatistics(wdStatisticLines) ' - col2 מגדיר גובה טור 2 Endcol2.Select col2 = Endcol2.Information(wdVerticalPositionRelativeToPage) Selection.EndKey Unit:=wdLine Set Endcol2 = Selection.Range ' col1מגדיר גובה טור -1 'Endcol1- סוף טור 1 'Startcol2- תחילת טור2 Startcol1.Select For i = 1 To NumLines Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=1, Name:="" If col1 > Selection.Information(wdVerticalPositionRelativeToPage) Then Set Startcol2 = Selection.Range Exit For Else col1 = Selection.Information(wdVerticalPositionRelativeToPage) Set Endcol1 = Selection.Range End If Next 'סוף טור 1 = סוף שורה Endcol1.Select Selection.EndKey Unit:=wdLine Set Endcol1 = Selection.Range 'Acol מגדיר הפרש בין טורים If col1 > col2 Then Acol = col1 - col2 If col1 < col2 Then Acol = col2 - col1 'בודק אם טורים ישרים If Acol < 0.05 Then 'עובר לעמודה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 Else 'Pcol1 - מספר פסקאות טור 1 WRange.SetRange Start:=Startcol1.Start, End:=Endcol1.End - 2 WRange.Select Set Rcol1 = Selection.Range Rcol1.Select Pcol1 = (Rcol1.ComputeStatistics(wdStatisticParagraphs)) 'Pcol2 - מספר פסקאות טור 2 WRange.SetRange Start:=Startcol2.Start, End:=Endcol2.End - 2 WRange.Select Set Rcol2 = Selection.Range Rcol2.Select Pcol2 = (Rcol2.ComputeStatistics(wdStatisticParagraphs)) If Pcol1 > Pcol2 Then 'עורך טור1 ' PPS - מחלק הפרש בין פסקאות PPS = Acol / Pcol1 'עבור לשורה ראשונה בטור Startcol1.Select ' 'אם טור 1 ארוך מ2 If col1 > col2 Then 'בודק אם רווח לא קטן מ2.5 If SpaceAfter - PPS > 2.5 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol1 'מקטין רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter - PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עורך טור 2 Else If Pcol2 = 0 Then 'אחרת עובר עמוד Endcol2.Select Selection.MoveDown wdParagraph, 1 Else PPS = Acol / Pcol2 'עבור לשורה ראשונה בטור 2 Startcol2.Select 'בודק אם רווח לא גדול מ25 If SpaceAfter + PPS < 25 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol2 'מוסיף רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter + PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עובר עמוד Else 'עבור לפסקה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 End If End If End If 'אם טור 2 ארוך מ1 ElseIf col1 < col2 Then 'בודק אם רווח לא גדול מ25 If SpaceAfter + PPS < 25 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol1 'מוסיף רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter + PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת שרווח יהיה גדול מ25 עורך טור 2 Else If Pcol2 = 0 Then 'אחרת עובר עמוד Endcol2.Select Selection.MoveDown wdParagraph, 1 Else PPS = Acol / Pcol2 'עבור לשורה ראשונה בטור 2 Startcol2.Select 'בודק אם רווח לא קטן מ2.5 If SpaceAfter - PPS > 2.5 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol2 'מקטין רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter - PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עובר עמוד Else 'עבור לפסקה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 End If End If End If End If 'אם טור 2 רב פסקאות או שווה ElseIf Pcol2 > Pcol1 Or Pcol2 = Pcol1 Then 'עורך טור 2 'מחלק הפרש בין פסקאות PPS = Acol / Pcol2 'עבור לשורה ראשונה בטור 2 Startcol2.Select 'אם טור 1 ארוך מ2 If col1 > col2 Then 'בודק אם רווח לא גדול מ25 If SpaceAfter + PPS < 25 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol2 'מוסיף רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter + PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עורך טור 1 Else If Pcol1 = 0 Then 'אחרת עובר עמוד Endcol2.Select Selection.MoveDown wdParagraph, 1 Else ' PPS - מחלק הפרש בין פסקאות PPS = Acol / Pcol1 'עבור לשורה ראשונה בטור Startcol1.Select 'בודק אם רווח לא קטן מ2.5 If SpaceAfter - PPS > 2.5 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol1 'מקטין רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter - PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עובר עמוד Else 'עבור לפסקה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 End If End If End If 'אם טור 2 ארוך מ1 ElseIf col2 > col1 Then 'בודק אם רווח לא קטן מ2.5 If SpaceAfter - PPS > 2.5 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol2 'מקטין רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter - PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עורך טור 1 Else If Pcol1 = 0 Then 'אחרת עובר עמוד Endcol2.Select Selection.MoveDown wdParagraph, 1 Else ' PPS - מחלק הפרש בין פסקאות PPS = Acol / Pcol1 'עבור לשורה ראשונה בטור Startcol1.Select 'בודק אם רווח לא גדול מ25 If SpaceAfter + PPS < 25 Then 'מפעיל פקודת תיקון בלולאה *מס' פסקאות For P = 1 To Pcol1 'מגדיל רווח אחרי פסקה With Selection For B = 1 To .Paragraphs.Count .Paragraphs(B).Format.SpaceAfter = .Paragraphs(B).Format.SpaceAfter + PPS Next B End With 'עבור לפסקה הבאה Selection.MoveDown wdParagraph, 1 Next P 'אחרת עובר עמוד Else 'עבור לפסקה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 End If End If End If End If End If 'עובר לעמודה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 End If 'עובר לעמודה הבאה Endcol2.Select Selection.MoveDown wdParagraph, 1 Application.ScreenUpdating = True End Sub
ושאר הקודים בקובץ המצ"ב
-
@רפרם-ב-ר-פפא לא הבנתי האם הקודים שהבאת בסוף הפוסט או לא
-
@רפרם-ב-ר-פפא תודה רבה!
עוזר מאד מאד!! -
@רפרם-ב-ר-פפא קודם כל תודה רבה על כל השקעות והשיפורים וכו',
משום מה אצלי עובד רק אם לוחצים פעמים, בפעם הראשונה הוא נראה שמריץ באמת את כל הסמך וכו', אבל באמת לא רואים שום שינוי, ורק אם לוחצים עוד פעם, אז עוד פעם מריץ ואז רואים, וזה קורה בין בעמוד זה בלבד ובין בכל המסמך.
ועוד שאלה
ברשימת הפקודות יש כמה אופציות:
ישור טורים בכל המסמך חדש, ויישור כל המסך חדש עורך טורים, מה הבדל ביניהם, ואותו דבר לגבי מכאן עד סוף המסמך.תודה
-
@רפרם-ב-ר-פפא
שוב תודה על תודה רבה על כל העבודה והמאמצים והכל בחינם, תודה, אצלי עובד טוב כל עוד שתחילת הטור הבא אין כותרות משנה (שהם עצמם גם בשתי טורים) אבל כשיש כותרת שם כזה:
לא מתקן את זה (אני יודע, שזה בעיה מסוג אחר, שאין מספיק מקום להכניס את הכותרת שצמודה לפסקה הבא וכו') אני רק שואל אם אמור לפתור גם כאלה דברים.והנה עוד שאלה/בקשה: אני מנסה לכתוב מאקרו ליישור טורים בעצמי (אני רוצה בעצמי כמה סיבות, אחד כי אני מתלמד בVBA ושתיים כי אני מעדיף להשתמש בפקודות שאני כתבתי, שהם יותר ברורים לי, אני יודע מה בדיוק הם עושים ולמה, ומה המגבלות שלהם, ולשנות אותם לפי הצורך, אבל כאן אני נתקתי בחלק היצירתי, לא בחלק של הקידוד, דהיינו אם הייתי עושה את זה ידני, מה הייתי מנסה לעשות.
אז אבקש אם זה לא טירחה גדולה, האם אתה יכול להסביר לי מה בדיוק אתה מנסה לעשות עם הקוד שלך, שמה יעשה ולפי איזה פרמטרים , ניסיתי לעבור עליו כבר כמה וכמה פעמים, (כמה ימים) ואני נאבד שם, מה בדיוק אתה רוצה לעשות, כלומר אני לא שואל על חלק של התיכנות, זה אני כבר אסתדר איך לכתוב אותו, אבל מה אתה רוצה לצוות למחשב שיעשה, שימדוד הפרשים ואז מה, איך יפתור את הבעיה, יפזר אותו בין השורות, או בין הפסיקאות, או מה,
אשמח אם תוכל לפרט לי, (שוב אני לא צריך שתסביר את כל קוד) תודה -
@האדם-החושב הקודים מיועדים להכניס לתבנית שלך או לתבנית ראשית אם אתה לא רוצה להוריד את כל התבנית וכן ללמידה
@menajemmendel א. אצלי עובד גם בפעם ראשונה ותודה על ההארה אבדוק את זה בעזר ה' אם אתה יכול להגדיר בדיוק מה הבעיה אם הוא בכל מסמך או כמות פסקאות וכן כותרות וכו' ב. יישור כל המסמך עורך טורים הוא פקודה פנימית מתוך הראשי שמפעיל אם צריך לערוך ג. אפשר שכיוון שהוא הפרש גדול מידי לא יכול לחלק במגבלת המינימום והמקסימום הפתרון לכאורה לבטל בקרת שורות מיותמות (לא הכנסתי למאקרו שעדיף לא להגיע לזה ולערוך ידנית כמו מרווח בין מילים או שורות במקרה של בעיה כי אינו משהו בנראות ) ולאחר מכן להפעיל שוב
ד. לתועלת הציבור אפרט בקצרה מה המאקרו עושה תחילה מגדיר איפה מתחיל טור (דהיינו תחילת שני טורים ועוצר במקום שיש לפניה כותרת על טור בודד)וכן סוף שני טורים ולאחר מכן מגדיר גובה כל אחד מהם וממילא ההפרש ולאחר שקיבל את ההפרש אם אינו ישר בודק באיזה טור יש יותר פסקאות (וזה לצורך הנראות) ועורך את הטור רב הפסקאות מחלק את ההפרש בין הפסקאות (-1 שהוא הסוף שעובר לעמוד הבא) ומפעיל לולאה כפול מספר פסקאות ומוסיף את התוצאה לכל פסקא וכמו כן לפני כן בודק אם התוצאה של המרווח לא תהיה מעל 25 או מתחת2.5 ואם כן מנסה לערוך את הטור השני (שהוא אינו רב בפסקאות) ואם גם שם לא עומד בכללים שנקבעו מדלג לעמוד הבא או מודיע שאינו עומד בקרטיונים
נ.ב. בענין המגבלת טווח ניתן לערוך ידנית למי שמבין קצת בVBA לחפש איפה כתוב 2.5 או25 ולשנות לרצוי מקווה בעזרת ה' שבקרוב יהיה טופס מסודר להגדיר טווח
בתקווה שעזרתי והועלתי לכולם -
@רפרם-ב-ר-פפא
תודה רבה על ההסבר המפורט, ולגבי השאלה הא' שלא עובד בפעם הראשונה, זה קורה בין בכל המסמך ובין רק בעמוד זה, וגם בדפים שאין לי כותרות -
אולי תוכל לעשות מאקרו דומה לפתרון בעיה נוספת של וורד:
במסמך שיש בו הרבה הערות שולים העימוד האוטמטי של וורד גורם לכך שפיסקה בסוף העמוד הראשון שאין מקום להערת שולים שלה בעמוד זה שכל הפיסקה עוברת לעמוד השני, וכן מעוד הרבה סיבות לפעמים הוורד מעביר קטע מסוף העמוד הראשון לתחילת העמוד השני וכתוצאה מכך נוצר חלל ריק בעמוד הראשון.
ולכן צריך לעשות מאקרו שיזהה את החלל הריק הזה וירחיב את הרווחים בין הפיסקאות בעמוד הראשון וכך לא יהיה חלל ריק.
תודה מראש -
פוסט זה נמחק!
-
-
לרפרם היקר, תודה ויישר כל על היישור טורים הנפלא, רציתי לשאול, הרי הספרים שאני מעמד מחולקים בד"כ לקטעים, ואם המקטע הבא הוא באותו עמוד ה'מאקרו' לא אוחז שצריך ליישר אותו והוא מיישר רק את סופי העמודים, באופן שצריך לעשות יישור טורים לכל קטע בפני עצמו ע"י האופציה של 'מכותרת לכותרת' רציתי לשאול אם יש לזה פתרון טוב.
תודה מראש. -
@ישיבישע-amp-amp-amp-amp-x27-ר
שלום
אם מדובר שיש באמצע העמוד כותרת בפריסה של טור 1 המאקרו מזהה אותו ומיישר את שני חלקי העמודים בנפרד
אשמח לשמוע היכן כן נתקלת בבעיה ביישור טורים בחלק מן העמוד
בהצלחה -
פוסט זה נמחק!
-
@רפרם-ב-ר-פפא
התקנתי את המאקרו, וכשאני לוחץ על 'הפעל', מופיעה לי תקלה זו
מה עשיתי לא טוב?
תודה רבה רבה! -
@ישראל-כהן
יש לך שני טורים במסמך? -
-
@ישראל-כהן
תנסה את התוסף שלי
https://mitmachim.top/post/626904