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

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
לוגו מותג
  1. דף הבית
  2. כללי - עזרה הדדית
  3. בקשה | בדיקה אצל הרב GPT

בקשה | בדיקה אצל הרב GPT

מתוזמן נעוץ נעול הועבר כללי - עזרה הדדית
11 פוסטים 3 כותבים 164 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • י יהודי זה הכי

    מישהו יכול לברר לי מה הבעיה בקוד VBA הבא אצל GPT (עדיף OpenAi)

    Sub שם_מוכר()
        Sheets("נתונים").Select
        Range("H1").Select
        Selection.Copy
        Sheets("נתונים").Select
        Range("H11").Select
        ActiveSheet.Paste
    sta:
    
    Dim na As Range
    Set na = Sheets("נתונים").Range("H1")
    a = InputBox("!!!הזן את שם המוכר החדש", "מוכר", na)
    If a = "" Then
        
       m = MsgBox("שים לב לא הוזן שם מוכר! לנסות שוב?", vbYesNo)
       If a = vbNo Then
       GoTo sta
       If a = vbYes Then
       Sheets("נתונים").Select
        Range("H11").Select
        Selection.Copy
        Sheets("נתונים").Select
        Range("H1").Select
        ActiveSheet.Paste
       
    Exit Sub
    
    End If
    
    
    
        End Sub
    
    יוסף אלחנןי מחובר
    יוסף אלחנןי מחובר
    יוסף אלחנן
    מדריכים
    כתב נערך לאחרונה על ידי יוסף אלחנן
    #2

    @יהודי-זה-הכי
    שאלתי את GPT, וזלה"ק:

    הבעיה בקוד שלך נובעת מכמה סיבות. הנה כמה נקודות שיכולות לגרום לבעיות:

    1. שימוש לא נכון ב-GoTo: השימוש ב-GoTo מיותר, ומבצע מעבר חוזר למקום לא ברור אם המשתמש בוחר ב-No בהודעת ה-MsgBox. כדאי לשקול לעצב את הלוגיקה באופן פחות תלוי ב-GoTo, למשל עם לולאה.

    2. משתנה a לא מוגדר: אתה משתמש ב-a כמשתנה שיקבל את הערך מה-InputBox, אך לא הגדרת אותו לפני השימוש. כדאי להוסיף הגדרה של המשתנה a בתחילת הקוד, לדוגמה:

    Dim a As String
    
    1. טעויות בלוגיקת ה-If: השימוש ב-If a = vbNo ו-If a = vbYes לא מוגן כראוי. אתה לא צריך להשוות את הערך של a ל-vbYes או vbNo אלא לבדוק את הערך שהמשתמש הזין.

    2. טעויות ב-Exit Sub: ה-Exit Sub נמצא בתוך בלוק ה-If, כך שהוא יפסיק את הריצה של הסאב-פרוצדורה לפני שהקוד יוכל להגיע למקום שדורש המשך.

    הנה גרסה מתוקנת של הקוד:

    Sub שם_מוכר()
        Sheets("נתונים").Select
        Range("H1").Select
        Selection.Copy
        Sheets("נתונים").Select
        Range("H11").Select
        ActiveSheet.Paste
    
    sta:
        Dim a As String
        Dim m As Integer
        
        a = InputBox("!!!הזן את שם המוכר החדש", "מוכר", Sheets("נתונים").Range("H1").Value)
        
        If a = "" Then
            m = MsgBox("שים לב לא הוזן שם מוכר! לנסות שוב?", vbYesNo)
            
            If m = vbNo Then
                Exit Sub
            ElseIf m = vbYes Then
                GoTo sta
            End If
        Else
            Sheets("נתונים").Select
            Range("H11").Select
            Selection.Copy
            Sheets("נתונים").Select
            Range("H1").Select
            ActiveSheet.Paste
        End If
    End Sub
    

    ההסברים לשינויים:

    1. הוספתי את הגדרת המשתנה a כמשתנה מסוג String.

    2. הפכתי את השוואת התשובה ל-MsgBox לנכונה (יש להשוות את הערך של m ל-vbYes או vbNo ולא את a).

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

    נסה את הקוד הזה וראה אם זה פותר את הבעיה!

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

      @יהודי-זה-הכי
      שאלתי את GPT, וזלה"ק:

      הבעיה בקוד שלך נובעת מכמה סיבות. הנה כמה נקודות שיכולות לגרום לבעיות:

      1. שימוש לא נכון ב-GoTo: השימוש ב-GoTo מיותר, ומבצע מעבר חוזר למקום לא ברור אם המשתמש בוחר ב-No בהודעת ה-MsgBox. כדאי לשקול לעצב את הלוגיקה באופן פחות תלוי ב-GoTo, למשל עם לולאה.

      2. משתנה a לא מוגדר: אתה משתמש ב-a כמשתנה שיקבל את הערך מה-InputBox, אך לא הגדרת אותו לפני השימוש. כדאי להוסיף הגדרה של המשתנה a בתחילת הקוד, לדוגמה:

      Dim a As String
      
      1. טעויות בלוגיקת ה-If: השימוש ב-If a = vbNo ו-If a = vbYes לא מוגן כראוי. אתה לא צריך להשוות את הערך של a ל-vbYes או vbNo אלא לבדוק את הערך שהמשתמש הזין.

      2. טעויות ב-Exit Sub: ה-Exit Sub נמצא בתוך בלוק ה-If, כך שהוא יפסיק את הריצה של הסאב-פרוצדורה לפני שהקוד יוכל להגיע למקום שדורש המשך.

      הנה גרסה מתוקנת של הקוד:

      Sub שם_מוכר()
          Sheets("נתונים").Select
          Range("H1").Select
          Selection.Copy
          Sheets("נתונים").Select
          Range("H11").Select
          ActiveSheet.Paste
      
      sta:
          Dim a As String
          Dim m As Integer
          
          a = InputBox("!!!הזן את שם המוכר החדש", "מוכר", Sheets("נתונים").Range("H1").Value)
          
          If a = "" Then
              m = MsgBox("שים לב לא הוזן שם מוכר! לנסות שוב?", vbYesNo)
              
              If m = vbNo Then
                  Exit Sub
              ElseIf m = vbYes Then
                  GoTo sta
              End If
          Else
              Sheets("נתונים").Select
              Range("H11").Select
              Selection.Copy
              Sheets("נתונים").Select
              Range("H1").Select
              ActiveSheet.Paste
          End If
      End Sub
      

      ההסברים לשינויים:

      1. הוספתי את הגדרת המשתנה a כמשתנה מסוג String.

      2. הפכתי את השוואת התשובה ל-MsgBox לנכונה (יש להשוות את הערך של m ל-vbYes או vbNo ולא את a).

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

      נסה את הקוד הזה וראה אם זה פותר את הבעיה!

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

      @יוסף-אלחנן לא פתר
      96efd930-0ec6-4599-80ab-97838640999a-image.png

      יוסף אלחנןי תגובה 1 תגובה אחרונה
      0
      • י יהודי זה הכי

        @יוסף-אלחנן לא פתר
        96efd930-0ec6-4599-80ab-97838640999a-image.png

        יוסף אלחנןי מחובר
        יוסף אלחנןי מחובר
        יוסף אלחנן
        מדריכים
        כתב נערך לאחרונה על ידי
        #4

        @יהודי-זה-הכי אני לא מבין בזה!

        אתה רוצה שנמשיך כמו תוכי?

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

          @יהודי-זה-הכי אני לא מבין בזה!

          אתה רוצה שנמשיך כמו תוכי?

          י מנותק
          י מנותק
          יהודי זה הכי
          כתב נערך לאחרונה על ידי יהודי זה הכי
          #5

          @יוסף-אלחנן כן
          אני פחות או יותר מבין מה הוא התכוון
          תודה רבה

          יוסף אלחנןי תגובה 1 תגובה אחרונה
          0
          • י יהודי זה הכי

            @יוסף-אלחנן כן
            אני פחות או יותר מבין מה הוא התכוון
            תודה רבה

            יוסף אלחנןי מחובר
            יוסף אלחנןי מחובר
            יוסף אלחנן
            מדריכים
            כתב נערך לאחרונה על ידי יוסף אלחנן
            #6

            @יהודי-זה-הכי
            יאללה, בוא נעשה סדר ונסדר לך את זה ברור ובריא בלי GoTo, בלי Select ובלי Copy מיותר — כמו שכותבים קוד נכון ב־VBA.

            הנה גרסה פשוטה, נקייה, שעושה בדיוק מה שאתה רוצה:

            מה הקוד עושה?
            לוקח את הערך מ־H1 ושם אותו ב־H11.

            פותח תיבת קלט למשתמש להזין שם מוכר.

            אם המשתמש לא מזין כלום, שואל אם לנסות שוב.

            אם בחר "לא" — מחזיר את השם הישן מ־H11 ל־H1 ויוצא.

            אם בחר "כן" — מחזיר שוב ל־InputBox עד שיזין משהו.

            קוד מתוקן ונקי:

            Sub שם_מוכר()
                Dim ws As Worksheet
                Dim a As String
                Dim m As VbMsgBoxResult
                
                Set ws = ThisWorkbook.Sheets("נתונים")
                
                ' שמירת שם קודם
                ws.Range("H11").Value = ws.Range("H1").Value
                
                Do
                    a = InputBox("!!!הזן את שם המוכר החדש", "מוכר", ws.Range("H1").Value)
                    
                    If a = "" Then
                        m = MsgBox("שים לב! לא הוזן שם מוכר. לנסות שוב?", vbYesNo + vbExclamation)
                        If m = vbNo Then
                            ' מחזיר את השם הישן
                            ws.Range("H1").Value = ws.Range("H11").Value
                            Exit Sub
                        End If
                    Else
                        ws.Range("H1").Value = a
                        Exit Sub
                    End If
                Loop
            End Sub
            

            למה זה עובד טוב:
            ✅ בלי .Select (לא צריך ב־VBA, זה סתם מאט ומכביד)
            ✅ בלי .Copy (אפשר להעביר ערכים פשוט דרך .Value)
            ✅ בלי GoTo (משתמשים בלולאה Do...Loop, הרבה יותר נכון ונקי)
            ✅ מבנה ברור, קריא ויעיל

            ע"כ לה"ק.


            מכאן ואלך, זה אנוכי הקטן, הנני עייף ותנומה נופלת על עפעפי,
            חפש לך פרייאר אחר 😜

            סתם, עוד מעט מישהו אחר יגיע לעזור לך בשיחה הזו...

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

              @יהודי-זה-הכי
              יאללה, בוא נעשה סדר ונסדר לך את זה ברור ובריא בלי GoTo, בלי Select ובלי Copy מיותר — כמו שכותבים קוד נכון ב־VBA.

              הנה גרסה פשוטה, נקייה, שעושה בדיוק מה שאתה רוצה:

              מה הקוד עושה?
              לוקח את הערך מ־H1 ושם אותו ב־H11.

              פותח תיבת קלט למשתמש להזין שם מוכר.

              אם המשתמש לא מזין כלום, שואל אם לנסות שוב.

              אם בחר "לא" — מחזיר את השם הישן מ־H11 ל־H1 ויוצא.

              אם בחר "כן" — מחזיר שוב ל־InputBox עד שיזין משהו.

              קוד מתוקן ונקי:

              Sub שם_מוכר()
                  Dim ws As Worksheet
                  Dim a As String
                  Dim m As VbMsgBoxResult
                  
                  Set ws = ThisWorkbook.Sheets("נתונים")
                  
                  ' שמירת שם קודם
                  ws.Range("H11").Value = ws.Range("H1").Value
                  
                  Do
                      a = InputBox("!!!הזן את שם המוכר החדש", "מוכר", ws.Range("H1").Value)
                      
                      If a = "" Then
                          m = MsgBox("שים לב! לא הוזן שם מוכר. לנסות שוב?", vbYesNo + vbExclamation)
                          If m = vbNo Then
                              ' מחזיר את השם הישן
                              ws.Range("H1").Value = ws.Range("H11").Value
                              Exit Sub
                          End If
                      Else
                          ws.Range("H1").Value = a
                          Exit Sub
                      End If
                  Loop
              End Sub
              

              למה זה עובד טוב:
              ✅ בלי .Select (לא צריך ב־VBA, זה סתם מאט ומכביד)
              ✅ בלי .Copy (אפשר להעביר ערכים פשוט דרך .Value)
              ✅ בלי GoTo (משתמשים בלולאה Do...Loop, הרבה יותר נכון ונקי)
              ✅ מבנה ברור, קריא ויעיל

              ע"כ לה"ק.


              מכאן ואלך, זה אנוכי הקטן, הנני עייף ותנומה נופלת על עפעפי,
              חפש לך פרייאר אחר 😜

              סתם, עוד מעט מישהו אחר יגיע לעזור לך בשיחה הזו...

              י מנותק
              י מנותק
              יהודי זה הכי
              כתב נערך לאחרונה על ידי יהודי זה הכי
              #7

              @יוסף-אלחנן הסתדר ברוך ה'
              הייתי מת להפציץ לך לייקים אבל אני לא יכול לתת אפילו 1

              אם לא תעזור לי להגיע ל10
              בעזרת ה' כשנגיע ל10 נזכור אותך

              בכל מקרה תודה רבה ענקית

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

                יש פה עוד מישהו בשביל לעזור לי שניה?

                D תגובה 1 תגובה אחרונה
                0
                • י יהודי זה הכי

                  יש פה עוד מישהו בשביל לעזור לי שניה?

                  D מנותק
                  D מנותק
                  DANIEL 4
                  כתב נערך לאחרונה על ידי
                  #9

                  @יהודי-זה-הכי כתב בבקשה | בדיקה אצל הרב GPT:

                  יש פה עוד מישהו בשביל לעזור לי שניה?

                  תנסה יש לי חצי דקה😊

                  תגובה 1 תגובה אחרונה
                  0
                  • י מנותק
                    י מנותק
                    יהודי זה הכי
                    כתב נערך לאחרונה על ידי
                    #10
                    Sub שם_מוכר()
                       'הסתר פעולות עד לסיום המאקרו (מונע שגיאות)
                        Application.ScreenUpdating = False
                        Dim ws As Worksheet
                        Dim a As String
                        Dim m As VbMsgBoxResult
                       
                        Set ws = ThisWorkbook.Sheets("נתונים")
                       
                        ' שמירת שם קודם
                        ws.Range("H11").Value = ws.Range("H1").Value
                       
                        Do
                            a = InputBox("!!!הזן את שם המוכר החדש", "מוכר", ws.Range("H1").Value)
                           
                            If a = "" Then
                                m = MsgBox("שים לב! לא הוזן שם מוכר. לנסות שוב?", vbYesNo + vbExclamation)
                                If m = vbNo Then
                                    ' מחזיר את השם הישן
                                    ws.Range("H1").Value = ws.Range("H11").Value
                                    Exit Sub
                                End If
                            Else
                                ws.Range("H1").Value = a
                                Exit Sub
                            End If
                        Loop
                    End Sub
                    
                    

                    שיוסיף שבהקשה על ביטול ייצא ישר מהמאקרו

                    יוסף אלחנןי תגובה 1 תגובה אחרונה
                    0
                    • י יהודי זה הכי
                      Sub שם_מוכר()
                         'הסתר פעולות עד לסיום המאקרו (מונע שגיאות)
                          Application.ScreenUpdating = False
                          Dim ws As Worksheet
                          Dim a As String
                          Dim m As VbMsgBoxResult
                         
                          Set ws = ThisWorkbook.Sheets("נתונים")
                         
                          ' שמירת שם קודם
                          ws.Range("H11").Value = ws.Range("H1").Value
                         
                          Do
                              a = InputBox("!!!הזן את שם המוכר החדש", "מוכר", ws.Range("H1").Value)
                             
                              If a = "" Then
                                  m = MsgBox("שים לב! לא הוזן שם מוכר. לנסות שוב?", vbYesNo + vbExclamation)
                                  If m = vbNo Then
                                      ' מחזיר את השם הישן
                                      ws.Range("H1").Value = ws.Range("H11").Value
                                      Exit Sub
                                  End If
                              Else
                                  ws.Range("H1").Value = a
                                  Exit Sub
                              End If
                          Loop
                      End Sub
                      
                      

                      שיוסיף שבהקשה על ביטול ייצא ישר מהמאקרו

                      יוסף אלחנןי מחובר
                      יוסף אלחנןי מחובר
                      יוסף אלחנן
                      מדריכים
                      כתב נערך לאחרונה על ידי
                      #11

                      @יהודי-זה-הכי כתב בבקשה | בדיקה אצל הרב GPT:

                      שיוסיף שבהקשה על ביטול ייצא ישר מהמאקרו

                      בקשתך מצוינת!
                      הכפתור "ביטול" ב-InputBox מחזיר vbNullString (כלומר ""), לכן הוא מתנהג כמו ריק — אבל אפשר לבדוק אם המשתמש לחץ על ביטול ע"י שימוש ב־StrPtr(a) = 0 (טריק ותיק ב־VBA שמזהה ביטול).

                      הנה הגרסה שלך משודרגת, כך שאם המשתמש לוחץ ביטול, המאקרו ייצא מיד — בלי לשאול שוב:

                      קוד מתוקן:

                      Sub שם_מוכר()
                          ' הסתר פעולות עד לסיום המאקרו
                          Application.ScreenUpdating = False
                          
                          Dim ws As Worksheet
                          Dim a As String
                          Dim m As VbMsgBoxResult
                         
                          Set ws = ThisWorkbook.Sheets("נתונים")
                         
                          ' שמירת שם קודם
                          ws.Range("H11").Value = ws.Range("H1").Value
                         
                          Do
                              a = InputBox("!!!הזן את שם המוכר החדש", "מוכר", ws.Range("H1").Value)
                              
                              ' אם המשתמש לחץ על ביטול - יציאה
                              If StrPtr(a) = 0 Then
                                  Exit Sub
                              End If
                             
                              If a = "" Then
                                  m = MsgBox("שים לב! לא הוזן שם מוכר. לנסות שוב?", vbYesNo + vbExclamation)
                                  If m = vbNo Then
                                      ' מחזיר את השם הישן
                                      ws.Range("H1").Value = ws.Range("H11").Value
                                      Exit Sub
                                  End If
                              Else
                                  ws.Range("H1").Value = a
                                  Exit Sub
                              End If
                          Loop
                      End Sub
                      

                      🟢 מה נוסף פה?
                      ✅ השורה:

                      If StrPtr(a) = 0 Then Exit Sub
                      

                      בודקת אם המשתמש לחץ על ביטול ויוצאת מיידית מהמאקרו.

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

                      זלשוה"ק

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

                      • התחברות

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

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