PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : [حل شده] نوشتن کد در محیط برنامه نویسی



eric
2018/08/25, 09:19
سلام دوستان ممنون میشم راهنماییم کنید
من زیاد به کد نویسی مسلط نیستم ولی یک ماکرو میخوام که جلوگیری کند از COPY و PASTE کردن در سلول هایی که دارای شرط با Data validation است در صورتی که با شرط مورد نظر مغایرت داشته باشم .(
کلا من یک فایل دارم که مربوط به یک سری قطعات تولیدی است و شامل 3 ستون شماره قطعه ، شماره گزارش و شماره پکینگ است میخوام برای هر قطعه تا در ستون شماره گزارش ، شماره ای از واحد کنترل کیفیت ثبت نشده است در ستون شماره پکینگ نتوانیم شماره ای برای آن وارد کنیم چه با تایپ کردن و

چه با copy و paste کردن

(برای ستون شماره پکینگ هم با استفاده از data validation شرط گذاشتم ) )
با تشکر

Amir Ghasemiyan
2018/09/04, 10:06
سلام دوست عزيز
نيازي به ديتاوليديشن نيست
كافيه اين كد رو استفاده كنيد



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
2018/09/05, 11:43
با سلام ممنون از پاسختون
عذرخواهی میکنم من متوجه نشدم این کد دقیقا چه کاری انجام میدهد و اینکه چرا نباید دیتاولیدیشن استفاده کنم پس شرطم را همانگونه که بالا عرض کردم چطور اعمال کنم ، میشه لطف کنید در فایل پیوستی که در بالا گذاشتم کد را قرار بدبد و آن را اعمال کنید تا متوجه منظورتون بشم .
با سپاس

Amir Ghasemiyan
2018/09/05, 12:06
با سلام ممنون از پاسختون
عذرخواهی میکنم من متوجه نشدم این کد دقیقا چه کاری انجام میدهد و اینکه چرا نباید دیتاولیدیشن استفاده کنم پس شرطم را همانگونه که بالا عرض کردم چطور اعمال کنم ، میشه لطف کنید در فایل پیوستی که در بالا گذاشتم کد را قرار بدبد و آن را اعمال کنید تا متوجه منظورتون بشم .
با سپاس

خواهش ميكنم
اين كد كارش اينه كه بررسي كنه در سلولي كه داريد اطلاعات وارد ميكنيد (از ستون سوم) آيا ستون دومش تكميل شده يا نه؟ اگر تكميل نشده بود مقدار وارد شده رو حذف ميكنه و گرنه ميذاره بمونه
اين كد كار ديتاوليديشن رو براتون انجام ميده (با اين مزيت كه كپي پيست رو هم ساپورت ميكنه) . همونطور كه عرض كردم نيازي به استفاده از ديتاوليديشن نداريد نه اينكه نبايد استفاده كنيد

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

eric
2018/09/05, 12:55
بازم با تشکر فراوان از پاسختون، دوست عزیز ماکرو یک ایراد دارد و پیغام خطا میدهد اگر در تصویر پیوست مشاهده بفرمایید پیغام خطا رو خدممتون نوشتم.ممنون

17208

Amir Ghasemiyan
2018/09/05, 13:17
بله درسته. اين كد رو جايگزين كد قبلي كنيد مشكل حل ميشه



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
2018/09/05, 13:44
ممنونم مشکل حل شد ، با سپاس فراوان که وقت گذاشتید ، با عرض معذرت فقط ستون پکینگ من 25 است و ستونی که باید پر باشد 11 است این 25 و 11 را در کد ماکرو چطور اعمال کنم قسمت Column <> 3 و (Offset(, -1 را باید تغییر دهم؟

Amir Ghasemiyan
2018/09/05, 13:46
ممنونم مشکل حل شد ، با سپاس فراوان که وقت گذاشتید ، با عرض معذرت فقط ستون پکینگ من 25 است و ستونی که باید پر باشد 11 است این 25 و 11 را در کد ماکرو چطور اعمال کنم قسمت Column <> 3 و (Offset(, -1 را باید تغییر دهم؟

بله دقيقا. 3 بايد بشه 25 و -1 هم بايد بشه -14 فكر كنم

eric
2018/09/05, 14:02
ممنون دوست عزیز موضوع حل شد

Amir Ghasemiyan
2018/09/08, 10:23
اگر بخوام شرطم به این صورت باشد که ستونی که باید پر باشد (در این ماکرو ستون 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