דילוג לתוכן
  • חוקי הפורום
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • 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 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • י מנותק
    י מנותק
    יהודי זה הכי
    כתב נערך לאחרונה על ידי יהודי זה הכי
    #1

    מישהו יכול לברר לי מה הבעיה בקוד 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
    
    יוסף אלחנןי תגובה 1 תגובה אחרונה
    0
    • י יהודי זה הכי

      מישהו יכול לברר לי מה הבעיה בקוד 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
                        • חוקי הפורום
                        • לא נפתר
                        • משתמשים
                        • חיפוש גוגל בפורום
                        • צור קשר