جلوگیری از delete شدن محتویات سلول و خالی ماندن آن

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • hs208

    • 2013/12/13
    • 74

    جلوگیری از delete شدن محتویات سلول و خالی ماندن آن

    با سلام
    من میخوام یک شیت رو در اختیار چند کاربر دیگه قرار بدم که همه ستونهاش محافظت و قفل شده و فقط یک ستونش قفل نیست و قابل ویرایشه.
    برای سلول های این ستون که قابل ویرایشه، Drop down list گذاشتم که فقط بتونن با عبارتهای معین سلول رو پر کنن و اگر چیز دیگه ای بنویسن خطا میده و قبول نمیکنه ،
    گزینه Ignore blank رو هم غیرفعال کردم و این گزینه باعث میشه که وقتی در حالت ویرایش سلول هستن اگه کل متن سلول رو پاک کنن و بخوان با حالت blank سلول رو ترک کنن ، خطا بده که دقیقا مطابق خواسته منه
    فقط مشکل اینجاست که
    اگه سلول رو انتخاب کنن و بدون اینکه برای ویرایش وارد سلول بشن، دکمهDelete رو بزنن متن سلول رو پاک میکنه و خطایی هم نمیگیره، تاکید میکنم این مشکل فقط وقتی اتفاق میفته که وارد سلول نشده باشی و کرسر چشمک زن داخل سلول فعال نباشه، یعنی کل کادر سلول در حالت انتخاب باشه (در این حالت کادر دور سلول پررنگتره)
    چکار کنم که در این حالت هم متن سلول نتونه پاک شه و فقط بتونن ازDrop down list یک عبارت رو انتخاب کنن و سلول هیچ وقت خالی از عبارت نمونه
    (آخه عبارت داخل سلولهای این ستون روی رنگ و اعداد بقیه ستونها تاثیر داره و اگه خالی بمونه ستونهای دیگه هم دچار خطا میشن)

    اگه از روش فرمول یا تنظیمات در اکسل نمیشه اینکارو کرد و فقط با ماکرو باید مشکلمو حل کنم ، لطفا ماکروشو بهم بدید چون من ماکرو نویسی بلد نیستم
    یه نمونه از فایل اکسل رو هم برای وضوح بیشتر سوال، به پیوست گذاشتم.
    با تشکر
    فایل های پیوست شده
  • sohrabahmadi

    • 2012/05/03
    • 142

    #2
    یه نگاه به این بندازید
    فایل های پیوست شده
    تو خشنود باشی و ما رستگار

    کامنت

    • MEYTI

      • 2010/11/11
      • 362

      #3
      با تشکر از جناب احمدی
      اگرهم نخواهید از فرم استفاده کنید میتونید از نمونه کد زیر استفاده کنید
      در این کد توسط یک حلقه سلولهایی را که پرشده اند را خاصیت lock آنها را فعال مبکند به عبارتی قفل میکند
      کد:
      With ActiveSheet
          .Unprotect Password:="123"
          .Cells.Locked = False
          For Each Cell In Range("c2:c10")
              If Cell.Value = "" Then
                  Cell.Locked = False
              Else
                  Cell.Locked = True
              End If
          Next Cell
          .Protect Password:="123"
      End With
      مهدی کریمی

      کامنت

      • ~M*E*H*D*I~

        • 2011/10/19
        • 4374

        #4
        این هم خدمت شما
        کد PHP:
        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
             
            
        Dim rngCell As Range
            
        If Not Application.Intersect(TargetMe.Range("c1:c10")) Is Nothing Then
                
        For Each rngCell In Application.Intersect(TargetMe.Range("c1:c10"))
                    If 
        Me.Cells(rngCell.Row"A").Value <> "Pending" Then
                        Application
        .OnKey "{DEL}"""
                        
        Exit For
                    Else
                        
        Application.OnKey "{DEL}"
                    
        End If
                
        Next rngCell
            
        Else
                
        Application.OnKey "{DEL}"
            
        End If
             
        End Sub 

        sigpic

        کامنت

        • hs208

          • 2013/12/13
          • 74

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

          کامنت

          • Behnam

            • 2013/03/25
            • 842

            #6
            آقای اسماعیلی زحمت کشیدن و یه نمونه خوب آماده کردن،دوستانی که زیاد آشنایی با vba ندارند حتما یه نگاهی به این بخش بکنن
            اینجا
            هرچیز که در جستن آنی، آنی

            کامنت

            • hs208

              • 2013/12/13
              • 74

              #7
              با سلام مجدد
              جناب آقای وطن پرست کد شما رو استفاده کردم فوق العاده عالی بود ،

              فقط یه مشکل کوچولو داره : وقتی توی شیتی که میخام سلولهاش Delete نشن هستم و سلولهای مذکور در حالت انتخاب قرار دارن اگر با همین وضعیت به شیت های دیگه برم امکان پاک کردن هیچ کدوم از سلولهای شیتهای دیگر وجود نداره.

              با مثال بیشتر توضیح میدم که ابهامی نمونه : مثلا اگر کد برای سلولهای C1:C10 در sheet1 نوشته شده ، و من سلول C5 رو در sheet1 انتخاب کرده باشم و درهمین حالت به sheet2 برم برای همه سلولهای sheet2 دکمه Delete غیر فعاله در مورد بقیه شیت ها هم همینطور ( Delete غیرفعاله) ولی اگر در sheet1 روی هر سلولی به غیر C1 تا C10 باشم دیگه این اتفاق نمیفته و دکمه Delete برای بقیه شیت ها فعال میشه
              امکان رفع اشکال وجود داره ؟ با تشکر

              کامنت

              • hs208

                • 2013/12/13
                • 74

                #8
                با سلام
                دوست گرامی ، آقای وطن پرست امروز به یه ایراد کوچولوی دیگه در مورد کدی که بهم داده بودید برخوردم
                مشکل اینه که وقتی که فایل اکسل باز می شود، اگر بدون هیچ انتخابی ، از ابتدا سلولهای ستونی که نمی خواهیم دکمه Delete برای آن ستون فعال باشد در حالت انتخاب باشند ، در این حالت دکمه Delete فعال است و برخلاف خواسته ما با فشردن آن ، متن سلول از قبل انتخاب شده، پاک میشود
                توضیح بیشتر برای وضوح مطلب اینکه : اگر در هنگام بستن فایل اکسل یکی از سلولهای ستونی که نمیخواهیم دکمه Delete برای آن ستون فعال باشد در حالت انتخاب باشد و فایل را با زدن گزینه Save ببندیم دفعه بعد که فایل باز میشود سلول مذکور ، به صورت پیش فرض در حالت انتخاب است در این لحظه اگر دکمه Delete فشرده شود محتویات این سلول پاک می شود و لی اگر سلول دیگری (توسط موس یا کلیدهای جهت نما) انتخاب شود، تازه از این به بعد دکمه Delete غیر فعال می شود

                بنده با این علم ناقص و اندکم احتمال میدم ایراد در قسمت select کد PHP باشد ، یعنی کد به گونه ای نوشته شده که دکمه Delete وقتی غیرفعال شود که یک سلول Select شود
                وهمچنین ایرادی هم که قبلا در مورد غیر فعال ماندن دکمه Delete در شیتهای دیگر مطرح کردم نیز احتمالا مربوط به قسمت Select کد PHP می باشد
                اگر مقدور است بررسی کنید. با تشکر

                کامنت

                • ~M*E*H*D*I~

                  • 2011/10/19
                  • 4374

                  #9
                  درود
                  در اولین فرصت مواردی که مطرح شد بررسی می کنم

                  sigpic

                  کامنت

                  • ~M*E*H*D*I~

                    • 2011/10/19
                    • 4374

                    #10
                    درود

                    در کدی که ارائه شده در صورت برقراری یک شرط کلید Del غیر فعال میشه وقتی با کلاس application کار می کنیم عملی که انجام میدیم بر روی کل ورک بوک تاثیر میذاره بنابراین بایستی شرطی قرار بدیم به این شکل که اگر شیتی غیر از شیت یک انتخاب شد کلید del فعال بشه و همچنین برای مورد بعدی باید کد رو از طریق event دیگه ای اجرا کنید مثل workbook_open

                    sigpic

                    کامنت

                    • hs208

                      • 2013/12/13
                      • 74

                      #11
                      با سلام
                      دوست گرامی جناب وطن پرست، بنده اصلا کدنویسی بلد نیستم (البته دارم سعی میکنم یاد بگیرم ) ولی فعلا اصلا وقت آزاد ندارم ، اگه لطف کنید کدشو بهم بدید خیلی ممنون میشم. (البته میدونم که این درخواست خیلی زیاده خواهیه ولی من به جز شما کسیو نمیشناسم) . بسیار سپسگذارم _ از پیگیریتون هم کمال تشکر رو دارم انشاا... فرصت بشه جبران کنم

                      کامنت

                      • hs208

                        • 2013/12/13
                        • 74

                        #12
                        با سلام
                        جناب وطن پرست ، مقدور نشد کد نهایی رو برای حل کامل مشکل بهم بدید (البته میدونم که براتون دردسره). ممنون میشم اگه زحمتشو بکشید

                        کامنت

                        • Ali Parsaei
                          مدير تالارتوابع اکسل

                          • 2013/11/18
                          • 1518

                          #13
                          سلام،
                          با توجه به طولاني شدن اين بحث و اينکه شما از vba سررشته نداريد، جسارتا" يک نکته هم بنده عرض کنم:
                          از conditional formating هم مي توانيد استفاده کنيد، به فايل ضميمه نگاه کنيد، البته جلوي کاربر را نمي گيرد ولي خانه را بعد از delete قرمز رنگ مي کند و حتي در خانه اي ديگر هم مي توان هشدار براي آن نوشت. يک نکته را توجه کنيد: در اين روش اگر خانه هاي مورد ويرايش کاربر ابتدا به ساکن خالي باشد قرمز مي شود پس ابتدا در آنها يک خط تيره گذاشته ام که خالي نباشد و سپس data validation را اعمال کرده ام.
                          به هر حال اين هم روشي است، شايد براي شما تو دست تر باشد!
                          خانه هاي فايل پيوست را ويرايش و delete کنيد و نتيجه را ببينيد، رمز صفحه هم همان 123 است.
                          فایل های پیوست شده
                          sigpic

                          کامنت

                          • ~M*E*H*D*I~

                            • 2011/10/19
                            • 4374

                            #14
                            نوشته اصلی توسط hs208
                            با سلام
                            جناب وطن پرست ، مقدور نشد کد نهایی رو برای حل کامل مشکل بهم بدید (البته میدونم که براتون دردسره). ممنون میشم اگه زحمتشو بکشید
                            درود
                            شرمنده اصلا این موضوع رو فراموش کرده بودم چشم بررسی می کنیم

                            sigpic

                            کامنت

                            • ~M*E*H*D*I~

                              • 2011/10/19
                              • 4374

                              #15
                              درود

                              کلیه شیت ها غیر از شیتی که میخوای سلول ها پاک نشه کد زیر رو اضافه کن

                              کد PHP:


                              Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                              Application.OnKey "{DEL}"
                              End Sub 

                              sigpic

                              کامنت

                              Working...