דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • בהיר
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • כהה
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. תוכנות
  3. יישומי אופיס
  4. אקסל
  5. VBA - excel
  6. עזרה הדדית - VBA excel
  7. עזרה | פקודת מאקרו של הוספת כמות הסתבכה לי...

עזרה | פקודת מאקרו של הוספת כמות הסתבכה לי...

מתוזמן נעוץ נעול הועבר עזרה הדדית - VBA excel
4 פוסטים 2 כותבים 82 צפיות 1 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אלף שין
    כתב נערך לאחרונה על ידי
    #1

    שלום רב
    במשך שנים הייתי משתמש בפקודת מאקרו בוורד שתכליתה להוסיף יחידה לכל הספרות במסמך
    כלומר כל מקום במסמך שכתוב 8 היא כותבת 9 וכל מקום שכתוב 342 היא כותבת 343
    כעת אני מפעיל אותה במחשב עם ווינדוס 11 ואופיס 365 [אולי זה קשור] וזה מוסיף בלולאה אינסופית ספרות למספר הראשון במסמך עד שאני נאלץ לסיים פעולת וורד באמצע.
    אבקש את עזרת הציבור לתקן לי את המאקרו דלהלן

    Sub add_num()
     
     Dim doc As Document
     Set doc = ActiveDocument
     Dim word As Range
     
     'Increment Numbers
     For Each word In doc.Words
     If IsNumeric(word.Text) Then
     word.Text = word.Text + 1
     End If
     Next word
     
     ' Original code for Macro1
     Selection.WholeStory
     
     ' Additional code from the second macro
     Selection.Find.ClearFormatting
     Selection.Find.Replacement.ClearFormatting
     Selection.Find.Replacement.Font.Color = wdColorRed
     With Selection.Find
     .Text = "^#"
     .Replacement.Text = ""
     .Forward = True
     .Wrap = wdFindContinue
     .Format = True
     .MatchCase = False
     .MatchWholeWord = False
     .MatchKashida = False
     .MatchDiacritics = False
     .MatchAlefHamza = False
     .MatchControl = False
     .MatchWildcards = False
     .MatchSoundsLike = False
     .MatchAllWordForms = False
     End With
     Selection.Find.Execute Replace:=wdReplaceAll
     Selection.Find.ClearFormatting
     Selection.Find.Font.Color = wdColorRed
     Selection.Find.Replacement.ClearFormatting
     With Selection.Find
     .Text = "^#"
     .Replacement.Text = ""
     .Forward = True
     .Wrap = wdFindContinue
     .Format = True
     .MatchCase = False
     .MatchWholeWord = False
     .MatchKashida = False
     .MatchDiacritics = False
     .MatchAlefHamza = False
     .MatchControl = False
     .MatchWildcards = False
     .MatchSoundsLike = False
     .MatchAllWordForms = False
     End With
     Selection.Find.ClearFormatting
     Selection.Find.Font.Color = wdColorRed
     Selection.Find.Replacement.ClearFormatting
     With Selection.Find
     .Text = ""
     .Replacement.Text = "^&^s"
     .Forward = True
     .Wrap = wdFindContinue
     .Format = True
     .MatchCase = False
     .MatchWholeWord = False
     .MatchKashida = False
     .MatchDiacritics = False
     .MatchAlefHamza = False
     .MatchControl = False
     .MatchWildcards = False
     .MatchSoundsLike = False
     .MatchAllWordForms = False
     End With
     Selection.Find.Execute Replace:=wdReplaceAll
     
     Selection.Font.Color = wdBlack
     Selection.MoveStart unit:=wdStory
     Selection.HomeKey wdStory ' This line moves the cursor to the beginning of the document
     
    End Sub
    
    Sub min_num()
     
     Dim doc As Document
     Set doc = ActiveDocument
     Dim word As Range
     
     'Increment Numbers
     For Each word In doc.Words
     If IsNumeric(word.Text) Then
     word.Text = word.Text + 1
     End If
     Next word
     
     ' Original code for Macro1
     Selection.WholeStory
     
     ' Additional code from the second macro
     Selection.Find.ClearFormatting
     Selection.Find.Replacement.ClearFormatting
     Selection.Find.Replacement.Font.Color = wdColorRed
     With Selection.Find
     .Text = "^#"
     .Replacement.Text = ""
     .Forward = True
     .Wrap = wdFindContinue
     .Format = True
     .MatchCase = False
     .MatchWholeWord = False
     .MatchKashida = False
     .MatchDiacritics = False
     .MatchAlefHamza = False
     .MatchControl = False
     .MatchWildcards = False
     .MatchSoundsLike = False
     .MatchAllWordForms = False
     End With
     Selection.Find.Execute Replace:=wdReplaceAll
     Selection.Find.ClearFormatting
     Selection.Find.Font.Color = wdColorRed
     Selection.Find.Replacement.ClearFormatting
     With Selection.Find
     .Text = "^#"
     .Replacement.Text = ""
     .Forward = True
     .Wrap = wdFindContinue
     .Format = True
     .MatchCase = False
     .MatchWholeWord = False
     .MatchKashida = False
     .MatchDiacritics = False
     .MatchAlefHamza = False
     .MatchControl = False
     .MatchWildcards = False
     .MatchSoundsLike = False
     .MatchAllWordForms = False
     End With
     Selection.Find.ClearFormatting
     Selection.Find.Font.Color = wdColorRed
     Selection.Find.Replacement.ClearFormatting
     With Selection.Find
     .Text = ""
     .Replacement.Text = "^&^s"
     .Forward = True
     .Wrap = wdFindContinue
     .Format = True
     .MatchCase = False
     .MatchWholeWord = False
     .MatchKashida = False
     .MatchDiacritics = False
     .MatchAlefHamza = False
     .MatchControl = False
     .MatchWildcards = False
     .MatchSoundsLike = False
     .MatchAllWordForms = False
     End With
     Selection.Find.Execute Replace:=wdReplaceAll
     
     Selection.Font.Color = wdBlack
     Selection.MoveStart unit:=wdStory
     Selection.HomeKey wdStory ' This line moves the cursor to the beginning of the document
     
    End Sub
    
    

    המחשב נועד לשרת את האדם ולא האדם את המחשב

    ב תגובה 1 תגובה אחרונה
    0
    • א אלף שין

      שלום רב
      במשך שנים הייתי משתמש בפקודת מאקרו בוורד שתכליתה להוסיף יחידה לכל הספרות במסמך
      כלומר כל מקום במסמך שכתוב 8 היא כותבת 9 וכל מקום שכתוב 342 היא כותבת 343
      כעת אני מפעיל אותה במחשב עם ווינדוס 11 ואופיס 365 [אולי זה קשור] וזה מוסיף בלולאה אינסופית ספרות למספר הראשון במסמך עד שאני נאלץ לסיים פעולת וורד באמצע.
      אבקש את עזרת הציבור לתקן לי את המאקרו דלהלן

      Sub add_num()
       
       Dim doc As Document
       Set doc = ActiveDocument
       Dim word As Range
       
       'Increment Numbers
       For Each word In doc.Words
       If IsNumeric(word.Text) Then
       word.Text = word.Text + 1
       End If
       Next word
       
       ' Original code for Macro1
       Selection.WholeStory
       
       ' Additional code from the second macro
       Selection.Find.ClearFormatting
       Selection.Find.Replacement.ClearFormatting
       Selection.Find.Replacement.Font.Color = wdColorRed
       With Selection.Find
       .Text = "^#"
       .Replacement.Text = ""
       .Forward = True
       .Wrap = wdFindContinue
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchKashida = False
       .MatchDiacritics = False
       .MatchAlefHamza = False
       .MatchControl = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       End With
       Selection.Find.Execute Replace:=wdReplaceAll
       Selection.Find.ClearFormatting
       Selection.Find.Font.Color = wdColorRed
       Selection.Find.Replacement.ClearFormatting
       With Selection.Find
       .Text = "^#"
       .Replacement.Text = ""
       .Forward = True
       .Wrap = wdFindContinue
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchKashida = False
       .MatchDiacritics = False
       .MatchAlefHamza = False
       .MatchControl = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       End With
       Selection.Find.ClearFormatting
       Selection.Find.Font.Color = wdColorRed
       Selection.Find.Replacement.ClearFormatting
       With Selection.Find
       .Text = ""
       .Replacement.Text = "^&^s"
       .Forward = True
       .Wrap = wdFindContinue
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchKashida = False
       .MatchDiacritics = False
       .MatchAlefHamza = False
       .MatchControl = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       End With
       Selection.Find.Execute Replace:=wdReplaceAll
       
       Selection.Font.Color = wdBlack
       Selection.MoveStart unit:=wdStory
       Selection.HomeKey wdStory ' This line moves the cursor to the beginning of the document
       
      End Sub
      
      Sub min_num()
       
       Dim doc As Document
       Set doc = ActiveDocument
       Dim word As Range
       
       'Increment Numbers
       For Each word In doc.Words
       If IsNumeric(word.Text) Then
       word.Text = word.Text + 1
       End If
       Next word
       
       ' Original code for Macro1
       Selection.WholeStory
       
       ' Additional code from the second macro
       Selection.Find.ClearFormatting
       Selection.Find.Replacement.ClearFormatting
       Selection.Find.Replacement.Font.Color = wdColorRed
       With Selection.Find
       .Text = "^#"
       .Replacement.Text = ""
       .Forward = True
       .Wrap = wdFindContinue
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchKashida = False
       .MatchDiacritics = False
       .MatchAlefHamza = False
       .MatchControl = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       End With
       Selection.Find.Execute Replace:=wdReplaceAll
       Selection.Find.ClearFormatting
       Selection.Find.Font.Color = wdColorRed
       Selection.Find.Replacement.ClearFormatting
       With Selection.Find
       .Text = "^#"
       .Replacement.Text = ""
       .Forward = True
       .Wrap = wdFindContinue
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchKashida = False
       .MatchDiacritics = False
       .MatchAlefHamza = False
       .MatchControl = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       End With
       Selection.Find.ClearFormatting
       Selection.Find.Font.Color = wdColorRed
       Selection.Find.Replacement.ClearFormatting
       With Selection.Find
       .Text = ""
       .Replacement.Text = "^&^s"
       .Forward = True
       .Wrap = wdFindContinue
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchKashida = False
       .MatchDiacritics = False
       .MatchAlefHamza = False
       .MatchControl = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       End With
       Selection.Find.Execute Replace:=wdReplaceAll
       
       Selection.Font.Color = wdBlack
       Selection.MoveStart unit:=wdStory
       Selection.HomeKey wdStory ' This line moves the cursor to the beginning of the document
       
      End Sub
      
      
      ב מנותק
      ב מנותק
      בינארי חכם
      כתב נערך לאחרונה על ידי
      #2

      @אלף-שין

      גימיני 4

      Sub add_num()
          Call ChangeNumbers(1)
      End Sub
      
      Sub min_num()
          Call ChangeNumbers(-1)
      End Sub
      
      Private Sub ChangeNumbers(ByVal stepVal As Long)
          Dim doc As Document
          Set doc = ActiveDocument
          Dim i As Long
          Dim w As Range
          Dim txt As String
          Dim hasTrailingSpace As Boolean
      
          Application.ScreenUpdating = False
      
          ' מעבר מהסוף להתחלה מונע לולאה אינסופית ושיבוש אינדקסים
          For i = doc.Words.Count To 1 Step -1
              Set w = doc.Words(i)
              txt = w.Text
              
              ' בדיקה האם המילה מסתיימת ברווח (וורד מצרף רווח עוקב לכל "מילה")
              hasTrailingSpace = (Right(txt, 1) = " ")
              txt = Trim(txt)
              
              ' בדיקה שהטקסט הוא מספר שלם חיובי או שלילי (ללא נקודות או פסיקים שעלולים להשתבש)
              If IsNumeric(txt) And InStr(txt, ".") = 0 And InStr(txt, ",") = 0 Then
                  If hasTrailingSpace Then
                      w.Text = CStr(CLng(txt) + stepVal) & " "
                  Else
                      w.Text = CStr(CLng(txt) + stepVal)
                  End If
              End If
          Next i
      
          ' --- המשך הקוד המקורי שלך (צביעה זמנית והוספת רווח קשיח) ---
          Selection.WholeStory
          
          Selection.Find.ClearFormatting
          Selection.Find.Replacement.ClearFormatting
          Selection.Find.Replacement.Font.Color = wdColorRed
          With Selection.Find
              .Text = "^#"
              .Replacement.Text = ""
              .Forward = True
              .Wrap = wdFindContinue
              .Format = True
              .MatchCase = False
              .MatchWholeWord = False
              .MatchKashida = False
              .MatchDiacritics = False
              .MatchAlefHamza = False
              .MatchControl = False
              .MatchWildcards = False
              .MatchSoundsLike = False
              .MatchAllWordForms = False
          End With
          Selection.Find.Execute Replace:=wdReplaceAll
          
          Selection.Find.ClearFormatting
          Selection.Find.Font.Color = wdColorRed
          Selection.Find.Replacement.ClearFormatting
          With Selection.Find
              .Text = ""
              .Replacement.Text = "^&^s"
              .Forward = True
              .Wrap = wdFindContinue
              .Format = True
              .MatchCase = False
              .MatchWholeWord = False
              .MatchKashida = False
              .MatchDiacritics = False
              .MatchAlefHamza = False
              .MatchControl = False
              .MatchWildcards = False
              .MatchSoundsLike = False
              .MatchAllWordForms = False
          End With
          Selection.Find.Execute Replace:=wdReplaceAll
          
          Selection.Font.Color = wdBlack
          Selection.HomeKey Unit:=wdStory
      
          Application.ScreenUpdating = True
      End Sub
      

      א תגובה 1 תגובה אחרונה
      3
      • ב בינארי חכם

        @אלף-שין

        גימיני 4

        Sub add_num()
            Call ChangeNumbers(1)
        End Sub
        
        Sub min_num()
            Call ChangeNumbers(-1)
        End Sub
        
        Private Sub ChangeNumbers(ByVal stepVal As Long)
            Dim doc As Document
            Set doc = ActiveDocument
            Dim i As Long
            Dim w As Range
            Dim txt As String
            Dim hasTrailingSpace As Boolean
        
            Application.ScreenUpdating = False
        
            ' מעבר מהסוף להתחלה מונע לולאה אינסופית ושיבוש אינדקסים
            For i = doc.Words.Count To 1 Step -1
                Set w = doc.Words(i)
                txt = w.Text
                
                ' בדיקה האם המילה מסתיימת ברווח (וורד מצרף רווח עוקב לכל "מילה")
                hasTrailingSpace = (Right(txt, 1) = " ")
                txt = Trim(txt)
                
                ' בדיקה שהטקסט הוא מספר שלם חיובי או שלילי (ללא נקודות או פסיקים שעלולים להשתבש)
                If IsNumeric(txt) And InStr(txt, ".") = 0 And InStr(txt, ",") = 0 Then
                    If hasTrailingSpace Then
                        w.Text = CStr(CLng(txt) + stepVal) & " "
                    Else
                        w.Text = CStr(CLng(txt) + stepVal)
                    End If
                End If
            Next i
        
            ' --- המשך הקוד המקורי שלך (צביעה זמנית והוספת רווח קשיח) ---
            Selection.WholeStory
            
            Selection.Find.ClearFormatting
            Selection.Find.Replacement.ClearFormatting
            Selection.Find.Replacement.Font.Color = wdColorRed
            With Selection.Find
                .Text = "^#"
                .Replacement.Text = ""
                .Forward = True
                .Wrap = wdFindContinue
                .Format = True
                .MatchCase = False
                .MatchWholeWord = False
                .MatchKashida = False
                .MatchDiacritics = False
                .MatchAlefHamza = False
                .MatchControl = False
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
            
            Selection.Find.ClearFormatting
            Selection.Find.Font.Color = wdColorRed
            Selection.Find.Replacement.ClearFormatting
            With Selection.Find
                .Text = ""
                .Replacement.Text = "^&^s"
                .Forward = True
                .Wrap = wdFindContinue
                .Format = True
                .MatchCase = False
                .MatchWholeWord = False
                .MatchKashida = False
                .MatchDiacritics = False
                .MatchAlefHamza = False
                .MatchControl = False
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
            
            Selection.Font.Color = wdBlack
            Selection.HomeKey Unit:=wdStory
        
            Application.ScreenUpdating = True
        End Sub
        

        א מנותק
        א מנותק
        אלף שין
        כתב נערך לאחרונה על ידי
        #3

        @בינארי-חכם
        ומה הוא מסביר מדוע הישן קורה תקלה של לולאה אינסופית של הוספת ספרה?

        המחשב נועד לשרת את האדם ולא האדם את המחשב

        תגובה 1 תגובה אחרונה
        0
        • ב מנותק
          ב מנותק
          בינארי חכם
          כתב נערך לאחרונה על ידי
          #4

          הסיבה ללולאה האינסופית באופיס 365 היא האופן שבו הלולאה For Each word In doc.Words עובדת בשילוב עם עריכת הטקסט: כאשר משנים את word.Text, אוסף ה-Words במסמך מתעדכן בזמן אמת, מוחק את הרווח העוקב שהיה צמוד למספר, ומגדיר מחדש את הטווח כך שהמאקרו מזהה את המספר החדש שוב ושוב (או מאחד אותו עם המילה הבאה).

          בנוסף, במאקרו המקורי שלך הפונקציה השנייה (min_num) הכילה בטעות + 1 במקום - 1.

          כדי לפתור את הבעיה לגמרי, יש לעבור על המילים מהסוף להתחלה (לולאת For i = ... Step -1) או להשתמש בחיפוש מבוסס תווים כלליים (Wildcards), ולשמור על הרווח שאחרי המספר במידה והיה קיים.

          להלן הקוד המתוקן והמלא (כולל החלק שמוסיף רווח קשיח ^s לאחר המספרים כפי שהיה אצלך בקוד המקורי, ותיקון של פונקציית ההפחתה min_num):

          תגובה 1 תגובה אחרונה
          2

          שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

          נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

          בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

          הרשמה התחברות

          • התחברות

          • אין לך חשבון עדיין? הרשמה

          • התחברו או הירשמו כדי לחפש.
          • פוסט ראשון
            פוסט אחרון
          0
          • חוקי הפורום
          • פופולרי
          • לא נפתר
          • משתמשים
          • חיפוש גוגל בפורום
          • צור קשר