עזרה | קוד להסרת ' או " לפי התאמה אישית
-
שלום לכולם ושבוע טוב
אני כבר חצי שנה בערך שובר את הראש איך לעשות לי קוד שיקל עלי מבחינת ' או " מיותרים.
אסביר קודם את הבעיה ואח"כ את הדרך לפתרון שחשבתי ואלי גם לצלוח אותו בקוד vba בס"ד.הבעיה: יש לי מלא מסמכים בוורד שיש שם מלא " על סימנים של שו"ע ומשנ"ב וכדו' זה יכול להיות ' או " לדוגמא א', ב', י"א, י"ב, קט"ז, וכו'.
כעת אני רוצה להסיר את כל ה" של הסימנים והאותיות (כלומר כל הסימנים שמפנים לספר אחר אני רוצה להסיר) בקלות אמנם אם אני יסיר אותם באופן גורף אני מאבד מקומות בהם אני כן צריך את ה " כדוגמא י"א, יכול להיות גם סימן יא, גם אות י"א, וכדו', אבל יכול להיות גםיש אומרים
בר"ת.
בקיצור עבודת נמלים על מלא מסמכים למעלה מ 40,000,000 מילים ואין הצר שווה....הדרך לפתרון: בתחילה חשבתי על רעיון לעשות חיפוש החלף לכל הר"ת ולעשות החלפה ללא " ולעבור ע"ז 1 1 1 הבא או החלף מקל חלקית הבעיה בדרך זו שהוא גם מחזיר לי ר"ת כמו ז"א ויל"ב ואכמ"ל למיניהם שלעולם הם לא יכולים להיות סימנים.
לאחמ"כ חשבתי על דרך יותר קלה פשוט לעשות קוד של גימטריה ולהריץ בלוף בתוך קוד של החלפה בהתחלה א' ולעבור 1 1 עד שנגמר ואח"כ לשלוח לו את ב' וכו' עד איזה מספר שאני רוצה, כך אני מדלג על כל הר"ת שבוודאי אין יכולים להיות סימנים. ועדיין המלאכה מרובה כי אני צריך לזוז כל פעם עם העכבר ולהחליט על כל ר"ת אם כן או לא.
וגם שם יתכן בעיה כמו סימן רצ"ח שיתכן והוא מובא ברח"צ כך שהקוד של הגימטריה מפספס אותו.השאלות שלי הם כדלהלן:
א. האם יש דרך להקל יותר ואיזה עוד " אני יכול לדלג עליהם ע"י קוד?
ב. האם יש אפשרות ליצור אוטומציה תוך כדי ריצת הקוד כלומר שאם אני יקיש את המספר 0 הוא ימחוק את הר"ת ואם אני יקיש 1 הוא ישאיר את הר"ת ולאחמ"כ הוא יעבור לחיפוש הבא.
אשמח לכל תשובה או רעיון שאפשר להקל על הענין.@אוריי
מצטער שלא ירדתי לעומק דעתך בכל אופן אולי משהו כזה יעזור לך?כרגע המאקרו מחפש רק מ- י"א עד צ"ט. מה שישמש אותך עבור רוב המופעים כולל תקי"א מאחר שהוא ימצא את האותיות י"א שבתוך סימן זה.
לחיפוש מופעים אחרים תצטרך להתאים אותו מחדש אולי זה מה שניסית לעשות עם הגימטריאות?Sub מאקרו_חיפוש_והחלפה_פרטני() ' על ידי pcinfogmach ' 'מאקרו זה נועד להקל על חיפוש והחלפה של מופעים רבים באופן פרטני 'מאקרו זה יכול לשמש עבור כל חיפוש והחלפה שתרצו כדלהלן: ' 'פשוט יש להחליף את הקודים של החיפוש תחת '.Text = 'ואת הקודים של ההחלפה תחת '.Replacement.Text = 'הכללים של הקודים הם לפי תווים כלליים. אם ברצונכם להשתמש עם כללי חיפוש והחלפה רגילים יש לשנות את: '.MatchWildcards = True 'ל- .MatchWildcards = False nxt: Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "([י-צ])(\"")([א-ט])" .Replacement.Text = "\1\3" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Dim userResponse As VbMsgBoxResult Dim replaceCount As Integer replaceCount = 0 ' Find the first match Selection.Find.Execute ' Prompt the user to replace or not userResponse = MsgBox("הטקסט שנמצא הוא: " & Selection.Text & vbNewLine & vbNewLine & "להחליף או לא? ", vbYesNoCancel + vbMsgBoxRight + vbMsgBoxRtlReading, "חיפוש והחלפה") While Selection.Find.found If userResponse = vbYes Then ' Replace current match and count Selection.Find.Execute Replace:=wdReplaceOne replaceCount = replaceCount + 1 GoTo nxt: End If If userResponse = vbNo Then GoTo nxt: End If If userResponse = vbCancel Then GoTo endr Wend endr: ' Show the number of replacements made MsgBox "הוחלפו " & replaceCount & " מופעים." End Sub ```kotlin
-
@אוריי
מצטער שלא ירדתי לעומק דעתך בכל אופן אולי משהו כזה יעזור לך?כרגע המאקרו מחפש רק מ- י"א עד צ"ט. מה שישמש אותך עבור רוב המופעים כולל תקי"א מאחר שהוא ימצא את האותיות י"א שבתוך סימן זה.
לחיפוש מופעים אחרים תצטרך להתאים אותו מחדש אולי זה מה שניסית לעשות עם הגימטריאות?Sub מאקרו_חיפוש_והחלפה_פרטני() ' על ידי pcinfogmach ' 'מאקרו זה נועד להקל על חיפוש והחלפה של מופעים רבים באופן פרטני 'מאקרו זה יכול לשמש עבור כל חיפוש והחלפה שתרצו כדלהלן: ' 'פשוט יש להחליף את הקודים של החיפוש תחת '.Text = 'ואת הקודים של ההחלפה תחת '.Replacement.Text = 'הכללים של הקודים הם לפי תווים כלליים. אם ברצונכם להשתמש עם כללי חיפוש והחלפה רגילים יש לשנות את: '.MatchWildcards = True 'ל- .MatchWildcards = False nxt: Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "([י-צ])(\"")([א-ט])" .Replacement.Text = "\1\3" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Dim userResponse As VbMsgBoxResult Dim replaceCount As Integer replaceCount = 0 ' Find the first match Selection.Find.Execute ' Prompt the user to replace or not userResponse = MsgBox("הטקסט שנמצא הוא: " & Selection.Text & vbNewLine & vbNewLine & "להחליף או לא? ", vbYesNoCancel + vbMsgBoxRight + vbMsgBoxRtlReading, "חיפוש והחלפה") While Selection.Find.found If userResponse = vbYes Then ' Replace current match and count Selection.Find.Execute Replace:=wdReplaceOne replaceCount = replaceCount + 1 GoTo nxt: End If If userResponse = vbNo Then GoTo nxt: End If If userResponse = vbCancel Then GoTo endr Wend endr: ' Show the number of replacements made MsgBox "הוחלפו " & replaceCount & " מופעים." End Sub ```kotlin
כמה הערות לגבי המאקרו:
-
המאקרו הנ"ל נכתב עבור צורך מסויים מצו"ב מאקרו שתוכלו לחפש איתו מה שרק תרצו מאקרו חיפוש והחלפה פרטניים
-
לא ראיתי צורך שיופיע בתוך תיבת ההחלפה הטקסט לפני ואחרי מאחר שהמאקרו עובד עם חיפוש והחלפה ומסמן בתוך המסמך עצמו היכן המופע הנוכחי. תנסה ותראה. (אם חלונית ההחלפה מסתירה תוכל לגרור אותה לצד).
-
-
@pcinfogmach
הרבה תודה על ההתייחסות
כפי איך שאני מכיר את המסמכים היטב יתכן וסימנים שלא יהיה לפניהם את אחד מהמופעים שהזכרת קודם סימן אות ס"ק וכו'
ובמיוחד בעריכה הפחד שלי היא לא לתת לאיזה קוד אפי' שאני חיברתי אותו לעשות לי שינויים במסמך באופן שלא אוכל לחזור בו כלל ובוודאי שלא אוכל לדעת מה הוא שינה ומה לא אני פשוט יאבד ידיים ורגליים.
מה שהייתי ממליץ ללכת הוא בכיוון הבא:
לעשות את הפעולות הבאות לחפש את המופעים לפי הסדר של א' ב' ג' וכו' כולל הר"ת שלהם ולהציג לי את זה אחד אחד במסמך ואני יחליט על כל אחד.
מה שהייתי רוצה זה להקל על אופן ההחלטות באופן שאני יוכל להשתמש באיזה 2 מקשים במקלדת ולא ריצה של עכבר או חיצים על המסך זה יריץ את העבודה.נ.ב. היה מי שהמליץ לי בעבר לעשות קוד שיחזיר את כל המופעים של הר"ת (כמובן לפי א' ב' וכו') לתוך טבלת אקסל כולל 2 מילים לפני ואחרי ואז להחליט על כל אחד בטבלת אקסל (או אקסס לפי הענין) ולעשות ע"ז החלפה. (אני לא יודע כמה זה יותר ממולץ אולי אפשר להמשיך את הרעיון שלו לאיזה בינה מלאכותית שתדע מתי זה וודאי סימן ומתי ספק ויש לשאול אותי (הציבור לבנתיים אומר שהוא לא מאמין בבינה מלאכותית אז כך ש....)
@אוריי
מאקרו מעודכן עם קיצורי מקשים והכל - ממש אוטומציה כמו שרצית - בהצלחה!
הוראות בפנים.
המאקרו נמצא כאן(אגב אפשר לשנות את קיצורי המקשים כאן:)
ספויילר
והנה הקוד אם אתה רוצה לשחק אתו:
Sub Macro1() ' ' Macro1 Macro ' ' Selection.MoveRight Unit:=wdCharacter, Count:=1 End Sub Sub Macro2() ' ' Macro2 Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "כדי" .Replacement.Text = "@@@@" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "כדי" .Replacement.Text = "@@@@" .Forward = False .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute End Sub
-
@אוריי
מאקרו מעודכן עם קיצורי מקשים והכל - ממש אוטומציה כמו שרצית - בהצלחה!
הוראות בפנים.
המאקרו נמצא כאן(אגב אפשר לשנות את קיצורי המקשים כאן:)
ספויילר
והנה הקוד אם אתה רוצה לשחק אתו:
Sub Macro1() ' ' Macro1 Macro ' ' Selection.MoveRight Unit:=wdCharacter, Count:=1 End Sub Sub Macro2() ' ' Macro2 Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "כדי" .Replacement.Text = "@@@@" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "כדי" .Replacement.Text = "@@@@" .Forward = False .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute End Sub
-
@pcinfogmach
כמה פרטים שיכולים להקל- להוסיף קיצור לביטול פעולה אחרונה כמו ctrl+z
- להוסיף קיצור דרך לתוצאה קודמת.
- כדי לבטל פעולה אחרונה אפשר להשתמש עם ctrl+z
- נוסף קיצור דרך לתוצאה קודמת.
הוראות חדשות בתוך המאקרו
https://mitmachim.top/assets/uploads/files/1680032226437-חיפוש-והחלפה-פרטניים.zip -
- כדי לבטל פעולה אחרונה אפשר להשתמש עם ctrl+z
- נוסף קיצור דרך לתוצאה קודמת.
הוראות חדשות בתוך המאקרו
https://mitmachim.top/assets/uploads/files/1680032226437-חיפוש-והחלפה-פרטניים.zip -
@pcinfogmach
אתה יכול לשלוח לי את הקוד המעודכן?@אוריי כתב בעזרה | קוד להסרת ' או " לפי התאמה אישית:
@pcinfogmach
אתה יכול לשלוח לי את הקוד המעודכן?בבקשה:
(לא לשכוח להגדיר את הקיצורי דרך עיין ספויילר)Public searchWord As String Public replaceWord As String Public useWildcards As Boolean Sub מאקרו_חיפוש_והחלפה_פרטניים_התחלת_חיפוש() ' ' By pcinfogmach searchWord = InputBox(":הזן מילה או קוד לחיפוש") replaceWord = InputBox(":הזן מילה או קוד להחלפה") useWildcards = MsgBox("האם ברצונך להשתמש בתווים כלליים?", vbYesNo + vbMsgBoxRight + vbMsgBoxRtlReading) = vbYes Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = searchWord .Replacement.Text = replaceWord .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute End Sub Sub מאקרו_חיפוש_והחלפה_פרטניים_חפש_הבא() With Selection.Find .Forward = True .Wrap = wdFindAsk End With Selection.Find.Execute End Sub Sub מאקרו_חיפוש_והחלפה_פרטניים_חפש_הקודם() With Selection.Find .Forward = False .Wrap = wdFindAsk End With Selection.Find.Execute End Sub Sub מאקרו_חיפוש_והחלפה_פרטניים_החלפה() With Selection.Find .Forward = True .Wrap = wdFindAsk End With Selection.Find.Execute Replace:=wdReplaceOne Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.Find.Execute End Sub Sub מאקרו_חיפוש_והחלפה_פרטניים_למי_שלא_מתאים_לו_קיצורי_מקשים_עם_תפריט_בחירה() ' ' על ידי pcinfogmach 'מאקרו זה יכול לשמש עבור כל חיפוש והחלפה שתרצו Dim findText As String Dim replaceText As String Dim useWildcards As Boolean Dim userResponser As Integer userResponser = MsgBox("האם אתם רוצים להשתמש בתווים כלליים בחיפוש זה?", vbYesNo + vbMsgBoxRight + vbMsgBoxRtlReading, "חיפוש והחלפה פרטניים") useWildcards = (userResponser = vbYes) findText = InputBox(":הזן טקסט או קוד לחיפוש") replaceText = InputBox(":הזן טקסט או קוד להחלפה") nxt: Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = findText .Replacement.Text = replaceText .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = useWildcards End With Dim userResponse As VbMsgBoxResult Selection.Find.Execute ' Prompt the user to replace or not userResponse = MsgBox("הטקסט שנמצא הוא: " & Selection.Text & vbNewLine & vbNewLine & "להחליף או לא? ", vbYesNoCancel + vbMsgBoxRight + vbMsgBoxRtlReading, "חיפוש והחלפה פרטניים") While Selection.Find.Found If userResponse = vbYes Then ' Replace current match and count Selection.Find.Execute Replace:=wdReplaceOne Selection.MoveRight Unit:=wdCharacter, Count:=1 GoTo nxt: End If If userResponse = vbNo Then GoTo nxt: End If If userResponse = vbCancel Then Exit Sub Wend End Sub
-
@אוריי כתב בעזרה | קוד להסרת ' או " לפי התאמה אישית:
@pcinfogmach
אתה יכול לשלוח לי את הקוד המעודכן?בבקשה:
(לא לשכוח להגדיר את הקיצורי דרך עיין ספויילר)Public searchWord As String Public replaceWord As String Public useWildcards As Boolean Sub מאקרו_חיפוש_והחלפה_פרטניים_התחלת_חיפוש() ' ' By pcinfogmach searchWord = InputBox(":הזן מילה או קוד לחיפוש") replaceWord = InputBox(":הזן מילה או קוד להחלפה") useWildcards = MsgBox("האם ברצונך להשתמש בתווים כלליים?", vbYesNo + vbMsgBoxRight + vbMsgBoxRtlReading) = vbYes Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = searchWord .Replacement.Text = replaceWord .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute End Sub Sub מאקרו_חיפוש_והחלפה_פרטניים_חפש_הבא() With Selection.Find .Forward = True .Wrap = wdFindAsk End With Selection.Find.Execute End Sub Sub מאקרו_חיפוש_והחלפה_פרטניים_חפש_הקודם() With Selection.Find .Forward = False .Wrap = wdFindAsk End With Selection.Find.Execute End Sub Sub מאקרו_חיפוש_והחלפה_פרטניים_החלפה() With Selection.Find .Forward = True .Wrap = wdFindAsk End With Selection.Find.Execute Replace:=wdReplaceOne Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.Find.Execute End Sub Sub מאקרו_חיפוש_והחלפה_פרטניים_למי_שלא_מתאים_לו_קיצורי_מקשים_עם_תפריט_בחירה() ' ' על ידי pcinfogmach 'מאקרו זה יכול לשמש עבור כל חיפוש והחלפה שתרצו Dim findText As String Dim replaceText As String Dim useWildcards As Boolean Dim userResponser As Integer userResponser = MsgBox("האם אתם רוצים להשתמש בתווים כלליים בחיפוש זה?", vbYesNo + vbMsgBoxRight + vbMsgBoxRtlReading, "חיפוש והחלפה פרטניים") useWildcards = (userResponser = vbYes) findText = InputBox(":הזן טקסט או קוד לחיפוש") replaceText = InputBox(":הזן טקסט או קוד להחלפה") nxt: Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = findText .Replacement.Text = replaceText .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = useWildcards End With Dim userResponse As VbMsgBoxResult Selection.Find.Execute ' Prompt the user to replace or not userResponse = MsgBox("הטקסט שנמצא הוא: " & Selection.Text & vbNewLine & vbNewLine & "להחליף או לא? ", vbYesNoCancel + vbMsgBoxRight + vbMsgBoxRtlReading, "חיפוש והחלפה פרטניים") While Selection.Find.Found If userResponse = vbYes Then ' Replace current match and count Selection.Find.Execute Replace:=wdReplaceOne Selection.MoveRight Unit:=wdCharacter, Count:=1 GoTo nxt: End If If userResponse = vbNo Then GoTo nxt: End If If userResponse = vbCancel Then Exit Sub Wend End Sub
-
@pcinfogmach
תודה רבה הקוד שלך עוזר לי המון הוא פשוט מקל בהרבה מהעבודה שהייתה מקודם