וורד מאקרו לוורד: הכנסת סימון אחרי מספר מסויים של מילים

ישורון קובי

צוות הנהלה
מנהל
מנוי פרימיום
עיצוב גרפי
עימוד ספרים
עימוד ספרים
בעקבות שאלה שנשאלה בפורום תג (לפני איזה זמן) שזה תוכנה:
  • אני צריך לחלק מסמך בתג לחלוקה לעימוד למספר עמודים מדויק מראש עם סימון בכל חלוקה
    איך עושים חפש מספר תווים מסוים או מילים מסוימות והחלף בסימון אחריהם
    תודה לעוזרים והמסיעים

    הרי ללהלן מאקרו להכניס סימון $ אחרי מספר מסויים של מילים.

    1. בתחילה הוא שואל כל כמה מילים להכניס את הסימון דולר.
    2. בזמן הריצה של המאקרו, הוא מעדכן בתחתית של הוורד את ההתקדמות.
    3. בסיום הפעולה הוא פולט הודעה שהוא סיים, ומציין כמה סימונים הוכנסו.

עריכה: הוסר המאקרו לצורך עדכון.

תודה, וסליחה על התקלה.
 
נערך לאחרונה ע"י מנהל:

סופריא - הוצאה לאור

מהמשתמשים המובילים!
מנוי פרימיום גולד
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
עריכה תורנית
לא יאומן איזה יופי זה עובד!!! יישר כח!!!

אפשר לאתגר אותך עוד קצת? יש אפשרות להגדיר במאקרו שאחרי שהוא סופר 1000 מילים נניח, שיחפש את סיום הפסקה הבאה וישים אחריה את הסימון?
 

גיוון

צוות הנהלה
מנהל
מנוי פרימיום
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי DIP
עיצוב גרפי
עימוד ספרים

ישורון קובי

צוות הנהלה
מנהל
מנוי פרימיום
עיצוב גרפי
עימוד ספרים
עימוד ספרים
אפשר לכאורה להחליף לאיזה תו שרוצים במאקרו... לא?
כן. בשביל להכניס סימון אחר, יש לשנות לכתוב משהו אחר במקום ה-$ בשורה הזאת: ActiveDocument.Words(currentWord).InsertAfter ("$")
 

ישורון קובי

צוות הנהלה
מנהל
מנוי פרימיום
עיצוב גרפי
עימוד ספרים
עימוד ספרים
מחילה על העיכוב בזה...
אחרי בדיקה של הדברים, למדתי שיש לוורד עצמו שתי גישות איך להגדיר "מילה" - מה נקרא יחידה של מילה?!. למדתי על זה - כאן.
אז פשוט צריך לשנות את המאקרו קצת שיתאים לספירה שאנחנו רגילים אליה מהספירת מילים של וורד. זה שינוי פשוט, אבל לוקח לוורד הרבה יותר זמן בדרך הזאת. לכן אני עובד על זה למצוא דרך יותר מהירה.
 

ישורון קובי

צוות הנהלה
מנהל
מנוי פרימיום
עיצוב גרפי
עימוד ספרים
עימוד ספרים
בדקתי כיוון קצת אחר, שיוצא ממנו מעלה אחת וחיסרון אחד.
זה הולך לפי משפטים בוורד - דהיינו סימון נקודה, או סימון פסקה.
ומתחיל לספור כמות מילים.
  • המעלה של זה שתמיד הסימון $ יפול בסוף משפט, או בסוף פסקה, ויש בזה היגיון.
  • החיסרון שזה לא יוצא בדיוק 1000 מילים. אלא קצת יותר (לפעמים קצת פחות - עד סטיה של 1 אחוז).
אז זה מה שיצא לעת עתה... אם יהיה עדכון בזה, נעדכן בהמשך אי"ה.

קוד:
Sub SignsByWords()
Dim Sign As String
Dim Max As Integer, Total As Integer, Sings As Integer
Dim Counter As Long, Progress As Long, totalWords As Long
Dim Sel As range
Dim iPrecatege As Integer

totalWords = ActiveDocument.ComputeStatistics(wdStatisticWords)

Start:
a = InputBox("במסמך יש: " & totalWords & "מילים " & vbCrLf & _
"כל כמה מילים להכניס סימון" & vbCrLf & vbCrLf & _
"החלוקה היא לפי משפטים" & vbCrLf & "דהיינו נקודה או סוף פסקה", _
"הכנס סימון לפי מילים", "1000")

If StrPtr(a) = 0 Then Exit Sub

'Check if input is a number
If Not IsNumeric(a) Then
    'a is not a number
    MsgBox "הכנס מספר חיובי הגדול מ-100", vbMsgBoxRtlReading, "הכנס סימון לפי מילים"
    GoTo Start
Else
    'a is a number and can be converted to Integer
    Max = CInt(a)
End If

If Max < 100 Then
    MsgBox "הכנס מספר חיובי הגדול מ-100", vbMsgBoxRtlReading, "הכנס סימון לפי מילים"
    GoTo Start
ElseIf Max >= totalWords Then
    MsgBox "המספר גדול מסך המילים בקובץ.", vbMsgBoxRtlReading, "הכנס סימון לפי מילים"
    GoTo Start
End If

Sign = InputBox("איזה סימן להכניס בטקסט", "הכנס סימון לפי מילים", "$")
If Sign = "" Then Sign = "$"

'Gets the total Sentences count
Total = ActiveDocument.Sentences.Count

Application.ScreenUpdating = False

'Loops through all Sentences
For Each Sel In ActiveDocument.Sentences
    Progress = Progress + 1
    'Adds real word count to Counter
    Counter = Counter + Sel.ComputeStatistics(wdStatisticWords)
    
    If Counter >= (Max * 0.99) Then
        Sel.InsertAfter (Sign)
        'Countings signs that was insereted
        Sings = Sings + 1
        'Elapses the counter
        Counter = 0
    End If
    
    iPrecatege = (Progress * 100 / Total)
    StatusBar = "Processing " & iPrecatege & " % "
    
Next Sel

Application.ScreenUpdating = True

MsgBox "סיים! הוכנסו סך הכל: " & Sings & "סימונים.", vbMsgBoxRtlReading, "הכנס סימון לפי מילים"

End Sub
 

סופריא - הוצאה לאור

מהמשתמשים המובילים!
מנוי פרימיום גולד
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
עריכה תורנית
בדקתי כיוון קצת אחר, שיוצא ממנו מעלה אחת וחיסרון אחד.
זה הולך לפי משפטים בוורד - דהיינו סימון נקודה, או סימון פסקה.
ומתחיל לספור כמות מילים.
  • המעלה של זה שתמיד הסימון $ יפול בסוף משפט, או בסוף פסקה, ויש בזה היגיון.
  • החיסרון שזה לא יוצא בדיוק 1000 מילים. אלא קצת יותר (לפעמים קצת פחות - עד סטיה של 1 אחוז).
אז זה מה שיצא לעת עתה... אם יהיה עדכון בזה, נעדכן בהמשך אי"ה.

קוד:
Sub SignsByWords()
Dim Sign As String
Dim Max As Integer, Total As Integer, Sings As Integer
Dim Counter As Long, Progress As Long, totalWords As Long
Dim Sel As range
Dim iPrecatege As Integer

totalWords = ActiveDocument.ComputeStatistics(wdStatisticWords)

Start:
a = InputBox("במסמך יש: " & totalWords & "מילים " & vbCrLf & _
"כל כמה מילים להכניס סימון" & vbCrLf & vbCrLf & _
"החלוקה היא לפי משפטים" & vbCrLf & "דהיינו נקודה או סוף פסקה", _
"הכנס סימון לפי מילים", "1000")

If StrPtr(a) = 0 Then Exit Sub

'Check if input is a number
If Not IsNumeric(a) Then
    'a is not a number
    MsgBox "הכנס מספר חיובי הגדול מ-100", vbMsgBoxRtlReading, "הכנס סימון לפי מילים"
    GoTo Start
Else
    'a is a number and can be converted to Integer
    Max = CInt(a)
End If

If Max < 100 Then
    MsgBox "הכנס מספר חיובי הגדול מ-100", vbMsgBoxRtlReading, "הכנס סימון לפי מילים"
    GoTo Start
ElseIf Max >= totalWords Then
    MsgBox "המספר גדול מסך המילים בקובץ.", vbMsgBoxRtlReading, "הכנס סימון לפי מילים"
    GoTo Start
End If

Sign = InputBox("איזה סימן להכניס בטקסט", "הכנס סימון לפי מילים", "$")
If Sign = "" Then Sign = "$"

'Gets the total Sentences count
Total = ActiveDocument.Sentences.Count

Application.ScreenUpdating = False

'Loops through all Sentences
For Each Sel In ActiveDocument.Sentences
    Progress = Progress + 1
    'Adds real word count to Counter
    Counter = Counter + Sel.ComputeStatistics(wdStatisticWords)
   
    If Counter >= (Max * 0.99) Then
        Sel.InsertAfter (Sign)
        'Countings signs that was insereted
        Sings = Sings + 1
        'Elapses the counter
        Counter = 0
    End If
   
    iPrecatege = (Progress * 100 / Total)
    StatusBar = "Processing " & iPrecatege & " % "
   
Next Sel

Application.ScreenUpdating = True

MsgBox "סיים! הוכנסו סך הכל: " & Sings & "סימונים.", vbMsgBoxRtlReading, "הכנס סימון לפי מילים"

End Sub
כל הכבוד!!! אכן עובד טוב יותר. אם אפשר להגדיר לו שתהיה גם אופציה של הצבת סימון רק בסיום פיסקה, יכול אולי להיות עוד יותר מועיל. אך גם כך מדובר בעזרה עצומה ממש!!
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קכז

א שִׁיר הַמַּעֲלוֹת לִשְׁלֹמֹה אִם יְהוָה לֹא יִבְנֶה בַיִת שָׁוְא עָמְלוּ בוֹנָיו בּוֹ אִם יְהוָה לֹא יִשְׁמָר עִיר שָׁוְא שָׁקַד שׁוֹמֵר:ב שָׁוְא לָכֶם מַשְׁכִּימֵי קוּם מְאַחֲרֵי שֶׁבֶת אֹכְלֵי לֶחֶם הָעֲצָבִים כֵּן יִתֵּן לִידִידוֹ שֵׁנָא:ג הִנֵּה נַחֲלַת יְהוָה בָּנִים שָׂכָר פְּרִי הַבָּטֶן:ד כְּחִצִּים בְּיַד גִּבּוֹר כֵּן בְּנֵי הַנְּעוּרִים:ה אַשְׁרֵי הַגֶּבֶר אֲשֶׁר מִלֵּא אֶת אַשְׁפָּתוֹ מֵהֶם לֹא יֵבֹשׁוּ כִּי יְדַבְּרוּ אֶת אוֹיְבִים בַּשָּׁעַר:
נקרא  13  פעמים

אתגר AI

אחרי החגים • אתגר 13

לוח מודעות

למעלה