בירור | קוד מאקרו ליישור שני טורים בוורד
-
-
@תודה-רבה-4
כן, הוא מיומן... -
@שמעלקא-0 איך זה נשמע פה לכא', כסף משמעותי ספק גדול אם תרוויח. אבל אם תעשה חסד ודאי תרוויח!
ועכ"פ, אשאל רק דבר אחד, האם אתה יכול להעלות לי בבקשה, את פקודות המאקרו שקורא כמה נקודות מרווח יש אחר הפיסקה המסומנת ומגדיל את המרווח הזה (שאחר אותה הפיסקה) בנקודה אחת או שתיים לפי מה שאני אקבע במאקרו (אני מסתדר עם אנגלית).
תודה! -
המאקרו הזה עובד כך:
באופן כללי וורד מיישר את הטקסט אוטומטית. אלא שלפעמים נותרים פערים בין הטורים.
המאקרו בודק את הדף, ומגלה היכן מסתיים כל טור.
אם יש פער ביניהם - הוא מגדיל את המרווח שבין הפסקאות.
לא התעסקתי (בינתיים) עם בקרת שורות מיותמות, ולא עם מרווחים בין שורות או תווים. רק עם מרווחים בין פסקאות [נסו זאת ידנית בלשונית "פריסה"].
ישנה אפשרות להגדיר מרווח מינימום ומקסימום בין פסקאות, על מנת שלא יווצר רווח גדול מידי.
אם יש באמצע העמוד כותרת רחבה, שחותכת את העמוד לשנים, המאקרו מיישר את שני הטורים בחצי הדף העליון, ואחר כך בנפרד את שני הטורים שבחצי הדף התחתון, מתחת לכותרת.
אם הגדלת המרווח בעמודה הקצרה לא מספיקה, המאקרו מצמצם את המרווחים בעמודה השניה.
בעמוד האחרון, אם יש רק טור ימני ואין טקסט בשמאל, הוא מיישר אותו בשני טורים כיאות.
זהו קוד כתוב, מושקע וארוך מאד, לא הקלטה של מאקרו... -
@שמעלקא-0 אני מבין, רק אני שאלתי רק דבר אחד, ב"משלים לוורד" אחד המאקרויים שם, יודע לקרוא את הריווח שאחר הפיסקה המסומנת, ואז יכול להגדיל אותו בנק' אחת, וכמובן המאקרו זו חסום כמו כל המשלים לוורד. חיפשתי בVSB פקודה שמתאימה לעשות את זה ולא מצאתי, אני מבין שלך יש הרבה נסיון בזה, האם אתה יכול לעזור?
תודה! -
@שמעלקא-0
אני כאחד שיוצא לו די הרבה להיפגש עם אברכים פשוטים שמעמדים בוורד. חושב בהחלט שאנשים יסכימו לשלם 50 שקל עבור תוסף שיתן את האופציה הזו.
במיוחד אחרי שאת המילה ראשונה חלון ומירכוז שורה אחרונה כבר יש חינמי. נשאר רק כותרות שמי שיודע מצליח בלי תוסף, ויישור טורים שזה בעצם העבודה המעצבנת........
אגב אם אני מבין ממך נכון המאקרו שלך רץ בבת אחת על כל המסמך ומסדר אותו! בשונה מהמאקרו של רחמים שלא מסדר את המסמך אלא רק נותן לך לראות כמה נקודות חסר בכל טור ומוסיף לחצנים מהירים להוסיף נקודות וכדו'.
תקן אותי אם אני טועה.
ואם זה כך לדעתי זה ירוץ ממש. (אלא א"כ אנשים אוהבים לתקן כל עמוד לבד כדי שיוכלו לראות האם עדיף להגדיל מרוח בין פסקאות או בין שורות וכו'. -
@גבאי אמר בבירור | קוד מאקרו ליישור שני טורים בוורד:
בשונה מהמאקרו של רחמים שלא מסדר את המסמך אלא רק נותן לך לראות כמה נקודות חסר בכל טור ומוסיף לחצנים מהירים להוסיף נקודות וכדו'.
תקן אותי אם אני טועה.המקרו של רחמים רץ על כל המסמך באופן אוטומטי ומסדר את הכל.
-
@תודה-רבה-4 אמר בבירור | קוד מאקרו ליישור שני טורים בוורד:
@מניין @גבאי יש כמה תוספים של רחמים, וכמה גירסאות. אולי תעדכנו על מה כל אחד מדבר.
מדובר על התוסף של רחמים 'בתשלום' שנקרא 'יישור טורים'.
-
-
-
פוסט זה נמחק!
-
המקרו של רחמים רץ על כל המסמך באופן אוטומטי ומסדר את הכל.
יש כמה תוספים של רחמים, וכמה גירסאות. אולי תעדכנו על מה כל אחד מדבר.
למיטב ידיעתי (כך בדקתי לפני קצת יותר משנה) יש לרחמים תוסף אחד בתשלום שמזהה בכל עמוד כמה נקודות חסר, ואז ע"י לחיצה על כפתור מסויים הוא מיישר, אבל לא ידוע לי כלל שיש משהו שמסדר את כל המסמך בבת אחת.
עיין כאן -
@poker אמר בבירור | קוד מאקרו ליישור שני טורים בוורד:
המקרו של רחמים רץ על כל המסמך באופן אוטומטי ומסדר את הכל.
למיטב ידיעתי (כך בדקתי לפני קצת יותר משנה) יש לרחמים תוסף אחד בתשלום שמזהה בכל עמוד כמה נקודות חסר, ואז ע"י לחיצה על כפתור מסויים הוא מיישר, אבל לא ידוע לי כלל שיש משהו שמסדר את כל המסמך בבת אחת.
עיין כאןאני מדבר מניסיון, כי פשוט יש לי את התוסף, וגם עיינתי בקישור ששלחת, וגם שם תראה שיש אפשרות שנקראת 'יישר מכאן והלאה' [ראה תמונה].
-
ובכן,
אני מעלה כאן קובץ ובו פקודת מאקרו ליישור שני טורים בוורד.
עומדים בעמוד הרצוי, מפעילים את המאקרו, והטורים מתיישרים.
המאקרו בודק את מבנה העמוד, ומוסיף מרווח בין פיסקאות כדי להגיע ליישור מדוייק בין הטורים.הנה הקובץ:
[מעדכן את הפוסט: בהמשך השרשור יש גירסה מעודכנת יותר של הקובץ]
LineToLines1.dotתודה ל @NykUser שכתב את הפוסט הזה, שהועיל לי בענין ההתקנה.
לחברים המומחים ב-VBA:
הקובץ הוא גירסה ראשונית, שעובדת יפה.
אך יש כמה דברים שעשויים לתקוע את הקוד, ואבקש את עזרת המומחים בשיפורו:
א. כדי שהטופס לא יפתח בכל הפעלה, יש צורך לשמור את הגדרות המשתמש האישיות במקור חיצוני מחוץ לקוד. אינני יודע איך עושים זאת.
ב. האם יש פונקציה שבודקת האם אני בטור הראשון או השני.
ג. האם יש פונקציה פשוטה שמחזירה את מספר הפיסקה שלי.
ד. האם יש פונקציה שמובילה אותי לשורה האחרונה בעמוד.
הדברים האלו יעשו את הקוד למדוייק יותר בכל סוגי הקבצים והעמודים, וידלג גם על המכשולים שמציבים לו התוספים הפיראטיים שמניחים מילה ראשונה בתוך מסגרת כדי ליצור חלון, וכיוצא באלו.
בתודה מראש -
תייגת אותי, קפצתי לביקור אחרי הרבה זמן שלא הייתי כאן, מצאתי גם הרשום בקוד שלך "תודה למי שיצר את קטע הקוד הזה ואיני יודע מיהו", כתבתי הקטע ואני שמח שזה עוזר.
לחברים המומחים ב-VBA:
הקובץ הוא גירסה ראשונית, שעובדת יפה.
אך יש כמה דברים שעשויים לתקוע את הקוד, ואבקש את עזרת המומחים בשיפורו:אשמח לעזור למי שעוזר לאחרים!
א. כדי שהטופס לא יפתח בכל הפעלה, יש צורך לשמור את הגדרות המשתמש האישיות במקור חיצוני מחוץ לקוד. אינני יודע איך עושים זאת.
שומרים זאת בתוך הregistry זהו דוגמה
System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\WordVBA_LineToLine", "Max") = "5" MsgBox (System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\WordVBA_LineToLine", "Max"))
ב. האם יש פונקציה שבודקת האם אני בטור הראשון או השני.
בעבר חיפשתי פונקציית vba מובנית ולא מצאתי, מישהו יודע?
זוהי פונקציה שכתבתי שמחזירה את ההפרש בין טור 1 ל-2, זה כנראה יענה על הצורך שלך.Public Sub tryout() MsgBox (ColumnsDifference) End Sub Public Function ColumnsDifference() As Double If Selection.PageSetup.TextColumns.Count <> 2 Then MsgBox ("More then 2 Columns"): Exit Function Application.ScreenUpdating = False Dim WRange As Range Dim NumLines, WPage, i, col1, col2, Difference, Ignore As Double NumLines = ActiveDocument.Bookmarks("\page").Range.ComputeStatistics(wdStatisticLines) ActiveDocument.Bookmarks("\page").Range.Select Selection.MoveLeft Unit:=wdCharacter, Count:=1 Set WRange = ActiveDocument.Bookmarks("\page").Range WRange.SetRange START:=WRange.End - 2, End:=WRange.End col2 = WRange.Information(wdVerticalPositionRelativeToPage) For i = 1 To NumLines Selection.MoveDown wdLine, 1 If col1 > Selection.Information(wdVerticalPositionRelativeToPage) Then Exit For Else col1 = Selection.Information(wdVerticalPositionRelativeToPage) End If Next ActiveDocument.Bookmarks("\page").Range.Select Selection.MoveLeft Unit:=wdCharacter, Count:=1 If col1 > col2 Then Difference = col1 - col2 If col1 < col2 Then Difference = col2 - col1 ColumnsDifference = Difference Application.ScreenUpdating = True End Function
ג. האם יש פונקציה פשוטה שמחזירה את מספר הפיסקה שלי.
הראשון למספר מתחילת הקובץ, השני לדף זה (המספר מתחיל באפס כרגיל בקוד)
Set MyRange = Selection.Range MyRange.SetRange START:=ActiveDocument.Paragraphs(1).Range.START, End:=MyRange.End MsgBox (MyRange.ComputeStatistics(wdStatisticParagraphs)) Set MyRange = Selection.Range MyRange.SetRange START:=ActiveDocument.Bookmarks("\page").Range.START, End:=MyRange.End MsgBox (MyRange.ComputeStatistics(wdStatisticParagraphs))
ד. האם יש פונקציה שמובילה אותי לשורה האחרונה בעמוד.
זה
Set MyRange = ActiveDocument.Bookmarks("\page").Range MyRange.SetRange START:=MyRange.End - 1, End:=MyRange.End MyRange.Select
-
@שמעלקא-0
ראשית ייש"כ ותזכה למצוות.
מה ששאלת איך לבגיע לשורה האחרונה, זה דבר פשוט מאד, תבקש מ @נוכחות את השורה, זה בקוד החדש שהעלה בימים האחרונים.@NykUser כתב בבירור | קוד מאקרו ליישור שני טורים בוורד:
שומרים זאת בתוך הregistry זהו דוגמה
Spoilerלא מבין למה זה צריך להגיע עד לרגיסטרי.
השאלה האם כשאכתוב בקובץ טקסט או אפילו בקובץ וורד, מספר כלשהו, האם הוא יוכל לקרוא את המסמך ולהחזיר את ההגדרה שם.
כי אם כן, אם אפשר לעשות עם הגדרת מיני ומקסי, וירוץ על כל המסמך בלי לשאול שוב בכל עמוד, כיון שב'אישור' זה ישמר בקובץ הנ"ל והוא רק יקרא משם וילך עמוד אחר עמוד. -
@es0583292679 כתב בבירור | קוד מאקרו ליישור שני טורים בוורד:
לא מבין למה זה צריך להגיע עד לרגיסטרי...
כמובן שזה תלוי לאיזה צורך הוא רוצה את זה
- אפשר לשומר המידע בתוך משתנה גלובלי
Module-level variables can be declared with a Dim or Private statement at the top of the module above the first procedure definition
Any of these will reset global variables: Using End, An unhandled runtime error, Editing code, Closing the word or file containing the VB project
- משתנה שנשמר בקובץ וורד, כך ניתן לשמור הגדרה שונה לכל קובץ, והיא תהיה זמינה גם לאחר שסגרתם ופתחתם מחדש את הקובץ, או אפילו את המחשב
ActiveDocument.Variables("LineToLineMax") = "5"
כדי לקבל את המידע, תחילה עליך לבדוק אם המשתנה נמצא
For Each avar In ActiveDocument.Variables If avar.Name = "LineToLineMax" Then MsgBox (ActiveDocument.Variables("LineToLineMax")) Next avar
- ברגיסטרי כמו שכתבתי לעיל, או בכל מקום אחר כמו קובץ ini או xml וזה יהיה זמין גם בקבצים חדשים
-
@שמעלקא-0 כתב בבירור | קוד מאקרו ליישור שני טורים בוורד:
ג. האם יש פונקציה פשוטה שמחזירה את מספר הפיסקה שלי.
הפונקציה הזו מחזירה את מספר הפיסקה מתחילת המסמך עד לתחילת הטווח שצויין, מקבלת אובייקט מסוג RANGE,
Function ParagraphNum(aRange As Range) Dim MyRange As Range Set MyRange = ActiveDocument.Range(ActiveDocument.Range.Start, aRange.Start) ParagraphNum = MyRange.Paragraphs.Count End Function
דוגמא לשימוש בקוד:
MsgBox ParagraphNum(Selection.Range)
-
-
@es0583292679 כתב בבירור | קוד מאקרו ליישור שני טורים בוורד:
@שמעלקא-0
ראשית ייש"כ ותזכה למצוות.
מה ששאלת איך לבגיע לשורה האחרונה, זה דבר פשוט מאד, תבקש מ @נוכחות את השורה, זה בקוד החדש שהעלה בימים האחרונים.@NykUser כתב בבירור | קוד מאקרו ליישור שני טורים בוורד:
שומרים זאת בתוך הregistry זהו דוגמה
Spoilerלא מבין למה זה צריך להגיע עד לרגיסטרי.
השאלה האם כשאכתוב בקובץ טקסט או אפילו בקובץ וורד, מספר כלשהו, האם הוא יוכל לקרוא את המסמך ולהחזיר את ההגדרה שם.
כי אם כן, אם אפשר לעשות עם הגדרת מיני ומקסי, וירוץ על כל המסמך בלי לשאול שוב בכל עמוד, כיון שב'אישור' זה ישמר בקובץ הנ"ל והוא רק יקרא משם וילך עמוד אחר עמוד.לא קראתי את כל האשכול אלא רק את ההודעה הזאת. אבל אם עדיין צריך עזרה. יש פונקציה מובנית בכל הפקודות בוורד ואפשר להקליט אותה ולהשתמש בה. (יכול להיות שהפונקציה זה שורה הבאה, ואז צריך להוסיף חזור אחד). אם עדיין צריך עזרה אפשר לתייג אותי שוב.