שיתוף | "מתעדכן" אוסף מאקרו לוורד - אינדקס מאקרו שימושי + הוראות חשובות.
-
@mfmf זה לא קשה בכללאבל אין לי זמן כרגע, אתם יודעים אחרי הכל ערב פסח, ואולי תשאלו אז איך יש לך זמן לענות פה על השאלה אומר לכם, שעיקר הקושי במקרו זה לא הכתיבה אלא התכנון בראש מה בדיוק יעשה
ולכן אגב אומר עצה טובה למי שלא יודע בעצמו לכתוב מאקרוים ומבקש בבמה חשובה זו או באחרת שמישהו יכתוב, שיעזור מאד אם בעת הבקשה יכתוב לדעתו, איך המקרו יעשה את זה, כלומר נכון ששלא יודע לכתוב את הפקודות, אבל שיכתוב איזה צעדים המחשב יעשה כדי לעשות את המקרו
תדמיינו שהמחשב הוא סוג של פועל סיני שלא יודע לקרוא עברית כדי לדעת מה כתוב בקובץ, אבל מבין אם תאמרו לו קודם לך לעמוד הא’ ואח’’כ תרד 3 שורות ותמחוק וכו’ וכו’וזה מאד מיקל על כותב המקרו, וגם אם אי אפשר לעשות מה שאתם בדיוק כתבתם נותן לו רעיונות איך לעשות
לדוגמא בא נאמר שאחד היה רוצה שיכתבו מאקרו לעשיית חלון בשורה שניה (אני יודע שיש לזה כבר מאקרוים אני רק אומר דוגמא) אזי נכון שהמבקש לא יודע שפת vba אבל יכול לומר אולי שילך לראש פסקה ירד שורה ויעתיק את המילה הראשונה בצבע לבן (אני יודע שזה לא באמת רעיון טוב מכמה סיבות) או אחר יאמר שאפשר לעשות תיבת טקסט ולהכניס את המילה הראשונה תוך התיבה וכו’ וכו’
בסדר הבנתם את הרעיון.לפעמים יכול גם כותב המאקרו עצמו להתייעץ אם משלא יודע לקודד, כי זה לא ענין של לקודד, זה עניין של הגיון טהור
תודה רבה -
@mfmf כתב בשיתוף | אוסף מאקרו לוורד - אינדקס מאקרו שימושי + הוראות חשובות:
@מניין אגדי! תודה רבה!!
יש מצב גם למאקרו דומה שיעשה מעבר עמוד לפי בחירת סגנון?
לדוגמא שיהיה אפשרות לבחור את סגנון 'פסקת רשימה' לדוגמה ויעבור אוטומטי בכל המסמך ויעשה לפניו מעבר עמוד.
בדרך כלל אנשים אוהבים שתחילת כל סימן יהיה בעמוד חדש, ובקובץ עם הרבה סימנים זה עבודת נמלים..
ייש"כהצלחתי בסוף דרך ChatGPT ליצור קוד שמוסיף מעבר שורה ידני לפני שורה ממורכזת וכמובן בלי להוסיף שורה מיותרת. הקוד עובד על כל המסמך.
זה הקוד למי שמעוניין:Sub AddPageBreaksToCenteredParagraphs() 'Declare variables Dim para As Paragraph Dim rng As Range 'Set the range to the beginning of the first paragraph Set rng = ActiveDocument.Paragraphs(1).Range 'Loop through each paragraph in the document For Each para In ActiveDocument.Paragraphs 'Set the range to the current paragraph Set rng = para.Range 'Check if the paragraph is centered If rng.ParagraphFormat.Alignment = wdAlignParagraphCenter Then 'Move the range to the end of the previous paragraph rng.MoveStart wdCharacter, -1 Do While rng.Characters.Last = vbCr rng.MoveEnd wdCharacter, -1 Loop 'Add a page break before the paragraph rng.InsertBefore Chr(12) End If Next para End Sub
-
@pcinfogmach תודה רבה על הקוד, אבל שאלה קטנה יש לי, למה צריך את המעבר שורה ידני, אותו דבר אפשר לעשות בלי המעבר שורה, בלי אנטר ובלי שום דבר, פשוט טאב ממורכז כמו שעשית
תודה
-
@menajemmendel כתב בשיתוף | אוסף מאקרו לוורד - אינדקס מאקרו שימושי + הוראות חשובות:
@pcinfogmach תודה רבה על הקוד, אבל שאלה קטנה יש לי, למה צריך את המעבר שורה ידני, אותו דבר אפשר לעשות בלי המעבר שורה, בלי אנטר ובלי שום דבר, פשוט טאב ממורכז כמו שעשית
תודה
אולי תמקד אותי על איזה קוד מדובר?
-
-
@pcinfogmach סליחה שלא פירטתי, התכוונתי על הקוד של מרכוז שורה אחרונה
ידיעה חשובה: לא פירטתי כי אפשר לראות על איזה משפט שלך כתבתי את שאלתי, עם מעבירים את העכבר מעל שם ה''נשאל'' ליד שם ה''שואל''
-
@menajemmendel כתב בשיתוף | אוסף מאקרו לוורד - אינדקס מאקרו שימושי + הוראות חשובות:
@pcinfogmach תודה רבה על הקוד, אבל שאלה קטנה יש לי, למה צריך את המעבר שורה ידני, אותו דבר אפשר לעשות בלי המעבר שורה, בלי אנטר ובלי שום דבר, פשוט טאב ממורכז כמו שעשית
תודה
המעבר שורה בא לחסוך בעיה כאשר לפעמים הטאב בעצם קופץ אוטמטית לסוף השורה הקודמת. מה שקורה כאשר יש רק קצת מילים בשורה הראשונה ובפרט כאשר הטקסט מיושר לשני הצדדים.
אפשר בעצם להוסיף קוד שימחק את המעבר שורה אחרי ההשמה של הטאב אבל העדפתי להשאיר את הדברים כך כיון שקוד זה עלול למחוק מעברי שורה שהמשתמש השים בעצמו.
כללו של דבר אין מאקרו מושלם וכל אחד יבחר לו מה שמתאים לו, כמו"כ יש עוד שיטות איך לעשות מירכוז שורה אחרונה וכמו שהבאתי באחד הפוסטים כאן בתוך התבנית עיצוב ספרי קודש.
-
@pcinfogmach לא הבנתי איך יכול להיות שאתה תשים טאב בשורה מסויימת, ויעלה למעלה, הרי הטאב הוא לא אות כל שהיא שאם יש מספיק מקום משבילה יכתוב אותה למעלה, נסיתי מה שאתה אומר ואל מצאתי מקרה כזה, אבל אם ראיתה כזה מקרה אשמח שתראה לי אותו כי זה לא נשמע כ''כ הגיוני
-
@menajemmendel לכאורה זה תלוי בגרסאות של אופיס
-
-
@pcinfogmach
נראה לי שהטעות שלך הוא שעשית את הטאב בסוף השורה הראשונה, ואתה צריך לעשות אותו בתחילה השורה השניה,
תנסה ותאמר לי -
@menajemmendel
נראה שאתה צודק
אצטרך לעשות בדיקות יותר מאסיביות בהמשך.
למעשה יש עוד סיבה למעבר שורה כדי למנוע כפילויות. אבל זה פתיר בצורות אחרות. -
@menajemmendel
עכשיו חשבתי על בעיה אחרת - מצד מחיקת המירכוז.
כי כרגע יש סימן זיהוי לטאבים של המירכוז לעומת טאבים אחרים - כלומר המחיקה חלה רק על טאבים ששיכים למירכוז. אבל בלי הוספת המעבר שורה אין שום סימן היכר והמחיקה תמחק את כל הטאבים גם מה שאינני רוצה שימחק.
פתרון אפשרי שצריך לבדוק אותו: שמאקרו המחיקה ימחק רק טאבים שבשורה האחרונה שבפיסקה.מה אתם אומרים על כל זה?
-
@menajemmendel כתב בשיתוף | אוסף מאקרו לוורד - אינדקס מאקרו שימושי + הוראות חשובות:
@pcinfogmach תודה רבה על הקוד, אבל שאלה קטנה יש לי, למה צריך את המעבר שורה ידני, אותו דבר אפשר לעשות בלי המעבר שורה, בלי אנטר ובלי שום דבר, פשוט טאב ממורכז כמו שעשית
תודה
מצו"ב הקוד המעודכן לפי ההצעה שלך
Option Explicit Sub מירכוז_שורה_אחרונה_בכל_הפסקאות_במסמך() ' ' ' Dim response As Integer response = MsgBox("שים לב, פקודה זו מהווה אילתור בלבד ומיועדת לשימוש לפני הדפסה." _ & vbNewLine & vbNewLine & "במקרה שערכתם שינויים במסמך תוכלו להריץ שוב פקודה זו" & vbNewLine & "בכדי לתקן את העיצוב.", _ vbInformation + vbOKCancel + vbMsgBoxRight + vbMsgBoxRtlReading, "מירכוז שורה אחרונה בפיסקה") If response = vbCancel Then Exit Sub Dim exclude2Lines As Boolean exclude2Lines = MsgBox("האם ברצונך לכלול פיסקאות עם 2 שורות?", vbQuestion + vbYesNo + vbMsgBoxRight + vbMsgBoxRtlReading, "מרכוז שורה אחרונה") = vbNo Call מחיקת_מרכוז_שורה_אחרונה_מכל_המסמך Dim para As Paragraph Dim middlePosition As Double For Each para In ActiveDocument.Paragraphs para.Range.Select 'exclusions If para.Range.ComputeStatistics(wdStatisticLines) > 1 Then If para.Range.ParagraphFormat.Alignment <> wdAlignParagraphCenter Then If Not exclude2Lines Or para.Range.ComputeStatistics(wdStatisticLines) <> 2 Then ' Move the cursor to end of paragraph. Selection.MoveStartUntil vbCrLf, wdForward 'add costume tabstop middlePosition = Selection.PageSetup.TextColumns(Dialogs(wdDialogFormatColumns).ColumnNo).Width / 2 With Selection.ParagraphFormat.TabStops .ClearAll .Add Position:=middlePosition, _ Alignment:=wdAlignTabCenter End With ' Move the cursor to the beginning of the last line in the paragraph. Selection.Move wdLine, -1 ' Check if the line already starts with a tab. If InStr(1, Selection.Text, vbTab) <> 1 Then ' Add a tab to the beginning of the line. Selection.TypeText vbTab End If End If End If End If Next End Sub Sub מירכוז_שורה_אחרונה_בפיסקאות_שנבחרו() ' ' ' Dim response As Integer response = MsgBox("שים לב, פקודה זו מהווה אילתור בלבד ומיועדת לשימוש לפני הדפסה." _ & vbNewLine & vbNewLine & "במקרה שערכתם שינויים במסמך תוכלו להריץ שוב פקודה זו" & vbNewLine & "בכדי לתקן את העיצוב.", _ vbInformation + vbOKCancel + vbMsgBoxRight + vbMsgBoxRtlReading, "מירכוז שורה אחרונה בפיסקה") If response = vbCancel Then Exit Sub Dim slctd As Range Set slctd = Selection.Range Dim exclude2Lines As Boolean exclude2Lines = MsgBox("האם ברצונך לכלול פיסקאות עם 2 שורות?", vbQuestion + vbYesNo + vbMsgBoxRight + vbMsgBoxRtlReading, "מרכוז שורה אחרונה") = vbNo Call הסרת_מרכוז_שורה_אחרונה_בפיסקאות_שנבחרו Dim para As Paragraph Dim middlePosition As Double For Each para In slctd.Paragraphs para.Range.Select 'exclusions If para.Range.ComputeStatistics(wdStatisticLines) > 1 Then If para.Range.ParagraphFormat.Alignment <> wdAlignParagraphCenter Then If Not exclude2Lines Or para.Range.ComputeStatistics(wdStatisticLines) <> 2 Then ' Move the cursor to end of paragraph. Selection.MoveStartUntil vbCrLf, wdForward 'add costume tabstop middlePosition = Selection.PageSetup.TextColumns(Dialogs(wdDialogFormatColumns).ColumnNo).Width / 2 With Selection.ParagraphFormat.TabStops .ClearAll .Add Position:=middlePosition, _ Alignment:=wdAlignTabCenter End With ' Move the cursor to the beginning of the last line in the paragraph. Selection.Move wdLine, -1 ' Check if the line already starts with a tab. If InStr(1, Selection.Text, vbTab) <> 1 Then ' Add a tab to the beginning of the line. Selection.TypeText vbTab End If End If End If End If Next End Sub Sub מחיקת_מרכוז_שורה_אחרונה_מכל_המסמך() Dim para As Paragraph Dim middlePosition As Double For Each para In ActiveDocument.Paragraphs If para.Range.ComputeStatistics(wdStatisticLines) > 1 Then If para.Range.ParagraphFormat.Alignment <> wdAlignParagraphCenter Then para.Range.Select ' Move the cursor to the beginning of the last line in the paragraph. Selection.MoveStartUntil vbCrLf, wdForward Selection.Move wdLine, -1 ' Check if the line already starts with a tab. If Not InStr(1, Selection.Text, vbTab) <> 1 Then ' delete tab in beginning of the line. Selection.Delete Unit:=wdCharacter, Count:=1 End If End If End If Next End Sub Sub הסרת_מרכוז_שורה_אחרונה_בפיסקאות_שנבחרו() Dim para As Paragraph Dim middlePosition As Double Dim slctd As Range Set slctd = Selection.Range For Each para In slctd.Paragraphs If para.Range.ComputeStatistics(wdStatisticLines) > 1 Then If para.Range.ParagraphFormat.Alignment <> wdAlignParagraphCenter Then para.Range.Select ' Move the cursor to the beginning of the last line in the paragraph. Selection.MoveStartUntil vbCrLf, wdForward Selection.Move wdLine, -1 ' Check if the line already starts with a tab. If Not InStr(1, Selection.Text, vbTab) <> 1 Then ' delete tab in beginning of the line. Selection.Delete Unit:=wdCharacter, Count:=1 End If End If End If Next End Sub
-
@pcinfogmach יש קצת סימן היכר, שהם לא טאבים רגילים אלא הם בדיוק באמצע הטור, אבל זה אינו מוכרח כי יכול להיות שיש אחרים גם באמצע, אז אולי באמת זה טוב עם המעבר שורה ידני,
אם אין שום חסרון במעבר שורה, אזי הוא בסדר, עיקר השאלה שלי, היה בדרך לימוד, וגם שאני לא אוהב שיהיה דברים מיותרים בקודים, אבל אם יש צורך אז אדרבה -
@pcinfogmach אני מקווה שהצעה שלי אכן הועילה ולא סתם הטרחתי אותך בחינם.
עכשיו שראיתי את הקוד החדש יש לי שאלה, ואני לא מתכון לשגע אתך סתם ''למה ככה ולא ככה וכו''' אני באמת שואל לדעת אם יש בזה משהו, אני קצת חדש בVBA, ושואל לדעתלמה יש חלקים בקוד שכתובים בצורה הפוכה (מסורבלת לדעתי) לדגומא החלק הזה:
' Check if the line already starts with a tab. If Not Left(Selection.Text, 1) <> vbTab Then
למה לא לכתוב ישר:
If Left(Selection.Text, 1) = vbTab Then
הוא כמו שאני אגיד לך:
כי לא אכחד ממך שדעתי אינה תואמת בהצהרה שפחות ברור אם לא נכתוב בצורה השניה.
כלומר, שאני חושב שיותר קל בצורה זו.האמת שאני לא יודע אם אתה כתבת את הקוד, או ניקיוזר, אז לא יודע למי לפנות בשאלה, בכל אופן תודה רבה על כל השקעה
-
@menajemmendel
ניקיוזר כתב במקור אני שיפצתי למעשה הוא מבין במאקרו הרבה יותר ממני
הסיבה להגדרה בשלילה אינה ידועה לי רק שהיא מאוד שימושית כאשר עושים החרגות כי לפעמים ההגדרה שאינה בשלילה לא תפעל שום החרגה. וכן להיפך לפעמים כשנראה שהגדרה בשלילה תעשה החרגה היא לא תעשה כלום ורק הגדרה חיובית תעשה החרגה.
אולי יבוא מישהו ויסביר לשנינו למה זה ככה.
למעשה הכלל בקידוד הוא עשה מה שעובד הכי טוב ואח"כ מה שמובן הכי טוב.(אגב עידכנתי את הקוד מעט מסיבות שונות עיין שוב בפוסט הקודם בשינויים שעשיתי שם)
-
מאקרו מעבר מהערה למסמך ולהיפך, וכן מאקרו ליצירת אינדקס בקלות
מעבר-מהערה-למסמך ואינדקס.dotm
בהצלחה -
@pcinfogmach
כידוע לפעמים תוך כדי הכתיבה פותחים סוגריים ושוכחים לסגור אותם, או שפותחים סוגריים בתוך סוגריים, דבר שלא תמיד מקובל
המאקרו הזה מחפש את המקרים האלה בצבע אדום, שאדם יוכל לתקנם (אפשר לעבור מאחד לשני עם קונטרול PAGEDOWNעריכה של ידידנו @דאנציג למטה https://mitmachim.top/assets/uploads/files/1682045184501-חיפוש-סוגריים-לא-סגורים.dotm
-
@menajemmendel כתב בשיתוף | אוסף מאקרו לוורד - אינדקס מאקרו שימושי + הוראות חשובות:
כידוע לפעמים תוך כדי הכתיבה פותחים סוגריים ושוכחים לסגור אותם, או שפותחים סוגריים בתוך סוגריים, דבר שלא תמיד מקובל
המאקרו הזה מחפש את המקרים האלה בצבע אדום, שאדם יוכל לתקנם (אפשר לעבור מאחד לשני עם קונטרול PAGEDOWNלא נמצאו תוצאות...