نوشتن کد در محیط برنامه نویسی

Collapse
این تاپیک قفل است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • eric

    • 2014/11/07
    • 62

    [حل شده] نوشتن کد در محیط برنامه نویسی

    سلام دوستان ممنون میشم راهنماییم کنید
    من زیاد به کد نویسی مسلط نیستم ولی یک ماکرو میخوام که جلوگیری کند از COPY و PASTE کردن در سلول هایی که دارای شرط با Data validation است در صورتی که با شرط مورد نظر مغایرت داشته باشم .(
    کلا من یک فایل دارم که مربوط به یک سری قطعات تولیدی است و شامل 3 ستون شماره قطعه ، شماره گزارش و شماره پکینگ است میخوام برای هر قطعه تا در ستون شماره گزارش ، شماره ای از واحد کنترل کیفیت ثبت نشده است در ستون شماره پکینگ نتوانیم شماره ای برای آن وارد کنیم چه با تایپ کردن و
    چه با copy و paste کردن
    (برای ستون شماره پکینگ هم با استفاده از data validation شرط گذاشتم ) )
    با تشکر
    فایل های پیوست شده
  • Amir Ghasemiyan

    • 2013/09/20
    • 4598
    • 100.00

    #2
    سلام دوست عزيز
    نيازي به ديتاوليديشن نيست
    كافيه اين كد رو استفاده كنيد

    کد:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 3 Then Exit Sub
    Application.EnableEvents = False
    If Target.Offset(, -1).Value = "" Then Target.Value = ""
    Application.EnableEvents = True
    End Sub
    دقت كنيد كه اين كد رو بايد داخل بخش كدهاي شيت مورد نظرتون قرار بديد

    کامنت

    • eric

      • 2014/11/07
      • 62

      #3
      با سلام ممنون از پاسختون
      عذرخواهی میکنم من متوجه نشدم این کد دقیقا چه کاری انجام میدهد و اینکه چرا نباید دیتاولیدیشن استفاده کنم پس شرطم را همانگونه که بالا عرض کردم چطور اعمال کنم ، میشه لطف کنید در فایل پیوستی که در بالا گذاشتم کد را قرار بدبد و آن را اعمال کنید تا متوجه منظورتون بشم .
      با سپاس

      کامنت

      • Amir Ghasemiyan

        • 2013/09/20
        • 4598
        • 100.00

        #4
        نوشته اصلی توسط eric
        با سلام ممنون از پاسختون
        عذرخواهی میکنم من متوجه نشدم این کد دقیقا چه کاری انجام میدهد و اینکه چرا نباید دیتاولیدیشن استفاده کنم پس شرطم را همانگونه که بالا عرض کردم چطور اعمال کنم ، میشه لطف کنید در فایل پیوستی که در بالا گذاشتم کد را قرار بدبد و آن را اعمال کنید تا متوجه منظورتون بشم .
        با سپاس
        خواهش ميكنم
        اين كد كارش اينه كه بررسي كنه در سلولي كه داريد اطلاعات وارد ميكنيد (از ستون سوم) آيا ستون دومش تكميل شده يا نه؟ اگر تكميل نشده بود مقدار وارد شده رو حذف ميكنه و گرنه ميذاره بمونه
        اين كد كار ديتاوليديشن رو براتون انجام ميده (با اين مزيت كه كپي پيست رو هم ساپورت ميكنه) . همونطور كه عرض كردم نيازي به استفاده از ديتاوليديشن نداريد نه اينكه نبايد استفاده كنيد

        فايل پيوست رو ملاحظه بفرماييد
        فایل های پیوست شده

        کامنت

        • eric

          • 2014/11/07
          • 62

          #5
          بازم با تشکر فراوان از پاسختون، دوست عزیز ماکرو یک ایراد دارد و پیغام خطا میدهد اگر در تصویر پیوست مشاهده بفرمایید پیغام خطا رو خدممتون نوشتم.ممنون

          Click image for larger version

Name:	Capture.JPG
Views:	1
Size:	315.4 کیلو بایت
ID:	134339

          کامنت

          • Amir Ghasemiyan

            • 2013/09/20
            • 4598
            • 100.00

            #6
            بله درسته. اين كد رو جايگزين كد قبلي كنيد مشكل حل ميشه

            کد:
            Private Sub Worksheet_Change(ByVal Target As Range)
            If Target.Column <> 3 Then Exit Sub
            Application.EnableEvents = False
            For i = 1 To Target.Rows.Count
                If Target.Item(i).Offset(, -1).Value = "" Then Target.Item(i).Value = ""
            Next i
            Application.EnableEvents = True
            End Sub

            کامنت

            • eric

              • 2014/11/07
              • 62

              #7
              ممنونم مشکل حل شد ، با سپاس فراوان که وقت گذاشتید ، با عرض معذرت فقط ستون پکینگ من 25 است و ستونی که باید پر باشد 11 است این 25 و 11 را در کد ماکرو چطور اعمال کنم قسمت Column <> 3 و (Offset(, -1 را باید تغییر دهم؟

              کامنت

              • Amir Ghasemiyan

                • 2013/09/20
                • 4598
                • 100.00

                #8
                نوشته اصلی توسط eric
                ممنونم مشکل حل شد ، با سپاس فراوان که وقت گذاشتید ، با عرض معذرت فقط ستون پکینگ من 25 است و ستونی که باید پر باشد 11 است این 25 و 11 را در کد ماکرو چطور اعمال کنم قسمت Column <> 3 و (Offset(, -1 را باید تغییر دهم؟
                بله دقيقا. 3 بايد بشه 25 و -1 هم بايد بشه -14 فكر كنم

                کامنت

                • eric

                  • 2014/11/07
                  • 62

                  #9
                  ممنون دوست عزیز موضوع حل شد

                  کامنت

                  • Amir Ghasemiyan

                    • 2013/09/20
                    • 4598
                    • 100.00

                    #10
                    اگر بخوام شرطم به این صورت باشد که ستونی که باید پر باشد (در این ماکرو ستون 11) اگر عددی بین صفر تا 1000 نباشد در ستون 25 نتوانم داده وارد کنم و دقیقا مثل همین ماکرو blank و بدون داده بماند و در صورتی که داده ستون 11 عددی بین صفر تا 1000 باشد بتوان درستون 25 داده وارد کرد. آیا برای همچین شرطی باید در قسمت ماکرو که قرمز کردم تغییراتی داد؟ و چه کدی باید در آن قسمت نوشت؟ متشکر از لطفتون

                    اصلاح شده كد رو براتون ميذارم:
                    کد:
                    Private Sub Worksheet_Change(ByVal Target As Range)
                    If Target.Column <> 25 Then Exit Sub
                    Application.EnableEvents = False
                    For i = 1 To Target.Rows.Count
                        With Target.Item(i).Offset(, -14)
                            If .Value = "" Or .Value > 1000 Or .Value < 0 Then Target.Item(i).Value = ""
                        End With
                    Next i
                    Application.EnableEvents = True
                    End Sub

                    کامنت

                    چند لحظه..