תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    חוקי הפורום

    אקסס - קוד VBA לחיפוש והחלפה

    תוכנה
    6
    22
    339
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • א
      איש פלוני נערך לאחרונה על ידי

      שלום וברכה,
      אני צריך קוד VBA שיוכל לעשות באופן אוטומטי את הפעולה שעושה הלחצן של חיפוש והחלפה המובנה באופיס.
      אבל, אני צריך:

      1. שהוא יעבוד דווקא על שדה מסויים בטבלה מסויימת.
      2. שהוא לא יעבוד אוטומטית אלא שאני אצטרך להריץ אותו. (עדיף שיהיה לי לחצן באיזשהו טופס, אבל אפשר גם דרך עורך הVBA)
      3. שהוא יחליף לפי סדר מסויים. (דהיינו אני רוצה שאת סדרת המספרים 1-20 הוא יחליף כל מספר לאות, 1-א, 2-ב וכן הלאה. אם הוא יתחיל מ-1 הוא יחליף לי את 11 ל-אא, לכן אני צריך שהוא יתחיל מ20 וירד כלפי מטה).
      4. אם יש אפשרות (לא חובה): שאת הנתונים מה להחליף הוא יקבל מטבלה אחרת בקובץ. דהיינו, אם יש לי טבלה כזו: 17cc1e7c-24e4-4f1d-bba6-5c937bb8833a-image.png שהקוד ידע שאת מה שבשדה הראשון להחליף במה שבשדה השני.

      אשמח לדעת אם יש אופציה כזו, ואיך.
      תודה רבה מאוד!

      A OdedDvir 2 תגובות תגובה אחרונה תגובה ציטוט 0
      • A
        avi rz @איש פלוני נערך לאחרונה על ידי

        @איש-פלוני אמר באקסס - קוד VBA לחיפוש והחלפה:

        הוא יחליף לי את 11 ל-אא, לכן אני צריך שהוא יתחיל מ20 וירד כלפי מטה).

        למה לא שאילתת עדכון? אתה מביא את 2 הטבלאות הנ"ל (1. הטבלה של המספרים והאותיות, 2. הטבלה שבה אתה רוצה להחליף)
        מוסיף קריטריון שהמספר בטבלה שאתה רוצה להחליף = המספר בטבלה של האותיות, ומעדכן את המספר לאותית,
        רק שים לב שכדאי שהכל יהיה בעיצוב של string - או שתשתמש בהחלפה ע"י Cstr() או Clng()

        א תגובה 1 תגובה אחרונה תגובה ציטוט 4
        • א
          איש פלוני @avi rz נערך לאחרונה על ידי

          @avi-rz כי עדכון יחליף לי את כל מה שבשדה. אני רוצה שאם בשדה כתוב 1 XXX זה יהפוך לא XXX ולא רק לא.

          OdedDvir dovid 2 תגובות תגובה אחרונה תגובה ציטוט 0
          • OdedDvir
            OdedDvir @איש פלוני נערך לאחרונה על ידי OdedDvir

            @איש-פלוני תוכל להשתמש בשאילתת עדכון ולשמור את הערך הקיים, פשוט תבצע Replace על הערך הקיים, כלומר למשל על השדה SomeField תעדכן ל:

            Replace([SomeField],'1','א')
            

            או בשימוש עם טבלת עזר MyTable כמו שציין @avi-rz, ותשלוף את הערכים משם:

            Replace([SomeField], MyTable.OldValue, MyTable.NewValue)
            
            א 2 תגובות תגובה אחרונה תגובה ציטוט 3
            • dovid
              dovid ניהול @איש פלוני נערך לאחרונה על ידי

              @איש-פלוני בשאילתת עדכון אתה יכול לכתוב Replace. בקיצור זה פתרון מצויין,
              אבל כדאי שתביא דוגמת נתונים קטנה כדי שיהיה קל להסביר.

              אפשר ליצור קשר dovid@tchumim.com

              א תגובה 1 תגובה אחרונה תגובה ציטוט 1
              • א
                איש פלוני @dovid נערך לאחרונה על ידי איש פלוני

                @dovid
                יש לי טבלה בשם kategoryot בה יש IDkategoria (קוד קטגוריה), ו- name
                ככה: 2bc16079-40bf-47d6-a69e-b3d584c949ba-image.png
                יש לי טבלה נפרדת בשם katalogM שבה יוצא בשדה kategHeara ככה:
                54317581-43aa-4b80-b7bc-6aec4a6b0aa5-image.png
                אני רוצה שיחליף לי רק את המספרים, כל מספר לפי הקטגוריה השייכת אליו.
                תודה רבה!

                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • א
                  איש פלוני @OdedDvir נערך לאחרונה על ידי

                  @odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:

                  או בשימוש עם טבלת עזר MyTable כמו שציין @avi-rz, ותשלוף את הערכים משם:
                  Replace([SomeField], MyTable.OldValue, MyTable.NewValue)

                  יש אפשרות להגדיר לו לפי איזה סדר הוא יחליף?
                  אחרת חוזרת הבעיה שכתבתי:

                  @איש-פלוני אמר באקסס - קוד VBA לחיפוש והחלפה:

                  אם הוא יתחיל מ-1 הוא יחליף לי את 11 ל-אא, לכן אני צריך שהוא יירד כלפי מטה.

                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • א
                    איש פלוני @OdedDvir נערך לאחרונה על ידי

                    @odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:

                    @איש-פלוני תוכל להשתמש בשאילתת עדכון ולשמור את הערך הקיים, פשוט תבצע Replace על הערך הקיים, כלומר למשל על השדה SomeField תעדכן ל:

                    Replace([SomeField],'1','א')
                    

                    אני יכול להגדיר לו כמה נתונים להחלפה (דהיינו, Replace([SomeField],'1','א'), ו Replace([SomeField],'2','ב')) ? כשניסיתי לעשות שאילתה שבכל אחד מהשדות אותה פונקציה עם נתונים שונים זה מעלה לי הודעת שגיאה על כפילות ביעד הפלט.
                    תודה רבה!

                    dovid תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • OdedDvir
                      OdedDvir @איש פלוני נערך לאחרונה על ידי OdedDvir

                      @איש-פלוני אני מציע לך דרך פשוטה יותר:
                      א. צור טבלה להחלפה עם עמודות כדלקמן:

                      OldValue NewValue
                      1 א
                      2 ב
                      ...
                      19 יט
                      20 כ

                      ב. תבודד את המספר מהשדה המקורי אל שדה נפרד X על ידי מניפולציה על המחרוזת.
                      ג. קשר את הטבלאות על ידי השדות X-OldValue
                      ד. תריץ שאילתת עדכון שתחליף בין הערך המספרי בשדה המקורי לערך NewValue:

                      Replace([SomeField],OldValue, NewValue)
                      
                      א תגובה 1 תגובה אחרונה תגובה ציטוט 1
                      • א
                        איש פלוני @OdedDvir נערך לאחרונה על ידי

                        @odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:

                        ב. תבודד את המספר מהשדה המקורי אל שדה נפרד X על ידי מניפולציה על המחרוזת.
                        ג. קשר את הטבלאות על ידי השדות X-OldValue

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

                        מלא תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • dovid
                          dovid ניהול @איש פלוני נערך לאחרונה על ידי dovid

                          @איש-פלוני ראשית כל אתה צריך להצליח לתשאל את הkatalogM באופן שמחלץ את המספר:

                           SELECT Mid([kategHeara],1,InStr([kategHeara],".")-1) as מניפולציה, kategHeara
                           FROM katalogM 
                          

                          תראה אם זה מוציא לך טוב את המספר.
                          שלב שני זה לעשות מה ש@OdedDvir הציע.

                          אפשר ליצור קשר dovid@tchumim.com

                          א תגובה 1 תגובה אחרונה תגובה ציטוט 1
                          • א
                            איש פלוני @dovid נערך לאחרונה על ידי איש פלוני

                            @dovid לא עובד. (שגיאת תחביר אופרטור חסר בביטוי השאילתה).
                            המילה מניפולציה באמצע? ככה?

                            dovid תגובה 1 תגובה אחרונה תגובה ציטוט 0
                            • dovid
                              dovid ניהול @איש פלוני נערך לאחרונה על ידי

                              @איש-פלוני תואיל להדביק פה את לשון השאילתה אחרי השינויים שעשית.

                              אפשר ליצור קשר dovid@tchumim.com

                              א תגובה 1 תגובה אחרונה תגובה ציטוט 0
                              • מלא
                                מלא @איש פלוני נערך לאחרונה על ידי מלא

                                @איש-פלוני
                                או שתחלץ את המספר עם הפונקציה הזאת. (בהנחה שאין עוד מספרים בשדה)

                                Public Function GetNumerals(str As String) As String
                                
                                Dim i As Integer
                                
                                    For i = 1 To Len(str)
                                        If IsNumeric(Mid(str, i, 1)) Then
                                            GetNumerals = GetNumerals & Mid(str, i, 1)
                                        End If
                                    Next i
                                
                                End Function
                                תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                • א
                                  איש פלוני @dovid נערך לאחרונה על ידי

                                  @dovid העתקתי את מה שכתבת לתוך שאילתה בתצוגה של SQL וזהו...

                                  OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • OdedDvir
                                    OdedDvir @איש פלוני נערך לאחרונה על ידי OdedDvir

                                    @איש-פלוני חסר פרמטר אחד בקוד של @dovid , צ"ל:

                                     SELECT Mid([kategHeara],1,InStr(1,[kategHeara],".")-1) as מניפולציה, kategHeara
                                     FROM katalogM 
                                    

                                    (עריכה: מה שכתבתי לעיל שגוי, עיין בהערת @dovid לקמן)

                                    dovid תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                    • dovid
                                      dovid ניהול @OdedDvir נערך לאחרונה על ידי

                                      @odeddvir זה אופציונלי.

                                      אפשר ליצור קשר dovid@tchumim.com

                                      OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                      • OdedDvir
                                        OdedDvir @dovid נערך לאחרונה על ידי

                                        @dovid אמר באקסס - קוד VBA לחיפוש והחלפה:

                                        זה אופציונלי.

                                        נכון, אבל צריך לכל הפחות להשמיט ולהשאיר מקום ריק, כך:

                                        SELECT Mid([kategHeara],1,InStr(,[kategHeara],".")-1) as מניפולציה, kategHeara
                                        FROM katalogM 
                                        
                                        dovid תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                        • dovid
                                          dovid ניהול @OdedDvir נערך לאחרונה על ידי

                                          @odeddvir לא צריך, אופציונלי זה אומר שניתן פשוט לדלג עליו לגמרי.
                                          הוא מזהה את הארגומנט נכון לפי מספר הארגומנטים (2).

                                          אפשר ליצור קשר dovid@tchumim.com

                                          OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                          • A
                                            avi rz נערך לאחרונה על ידי

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

                                            Public Function GetGimatryya(str_ As Variant) As Long
                                                    
                                                
                                                Dim i As Long
                                                Dim longht_ As Long
                                                Dim Y As Long
                                                Dim out As Long
                                                Dim str_to_out As String
                                                
                                                longht_ = Len(Nz(str_, ""))
                                                For i = 1 To longht_
                                                    str_to_out = Mid(str_, i, 1)
                                                    Select Case str_to_out
                                                        Case "א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט", "י", "כ", "ל", "מ", "נ", "ס", "ע", "פ", "צ", "ק", "ר", "ש", "ת", "ך", "ם", "ן", "ף":
                                                            Y = Asc(str_to_out) - 223
                                                        Case Else
                                                            Y = 0
                                                    End Select
                                                    arr_ = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 20, 30, 40, 40, 50, 50, 60, 70, 80, 80, 90, 90, 100, 200, 300, 400)
                                                    out = Nz(out, 0) + arr_(Y)
                                                Next i
                                                GetGimatryya = out
                                            End Function
                                            
                                            Public Function GetGimatryyaStr(str_ As Variant) As String
                                                    
                                                
                                                Dim i As Long
                                                Dim longht_ As Long
                                                Dim Y As Long
                                                Dim out As String
                                                Dim str_to_out As Long
                                                
                                                longht_ = Len(Nz(str_, ""))
                                                arr_ = Array("", "א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט", "י", "י", "כ", "ל", "מ", "נ", "ס", "ע", "פ", "צ", "ק", "ק", "ר", "ש", "ת")
                                                
                                                For i = 1 To longht_
                                                    Select Case (longht_ + 1) - i
                                                        Case 1:
                                                            str_to_out = CLng(IIf(Nz(Mid(str_, i, 1), "") = "", 0, Mid(str_, i, 1)))
                                                            out = Nz(out, 0) + arr_(str_to_out)
                                                        Case 2:
                                                            str_to_out = CLng(IIf(Nz(Mid(str_, i, 1), "") = "", 0, Mid(str_, i, 1)))
                                                            out = Nz(out, 0) + arr_(str_to_out + 10)
                                                        Case Else
                                                            str_to_out = CLng(IIf(Nz(Mid(str_, i, 1), "") = "", 0, Mid(str_, i, 1)))
                                                            out = Nz(out, 0) + arr_(str_to_out + 20)
                                                    End Select
                                                Next i
                                                GetGimatryyaStr = out
                                            End Function
                                            

                                            אפשר לנסות

                                            Debug.Print GetGimatryya("רמח")
                                            Debug.Print GetGimatryyaStr(499)
                                            
                                            הללוהו תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                            • OdedDvir
                                              OdedDvir @dovid נערך לאחרונה על ידי OdedDvir

                                              @dovid אמר באקסס - קוד VBA לחיפוש והחלפה:

                                              לא צריך, אופציונלי זה אומר שניתן פשוט לדלג עליו לגמרי.
                                              הוא מזהה את הארגומנט נכון לפי מספר הארגומנטים (2).

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

                                              תגובה 1 תגובה אחרונה תגובה ציטוט 2
                                              • הללוהו
                                                הללוהו @avi rz נערך לאחרונה על ידי

                                                פוסט זה נמחק!
                                                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                • 1 / 1
                                                • פוסט ראשון
                                                  פוסט אחרון
                                                בא תתחבר לדף היומי!