هایلایت کردن سلول های ویرایش شده

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

    • 2015/01/09
    • 73
    • 56.00

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

    من میخوام در صورتی که داده های وارد شده در اکسل ویرایش شد رنگ سلول عوض بشه
    کد:
    [COLOR=#0A0101][FONT=&quot][TABLE="width: 100%"]
    [TR]
    [TD="class: code"]Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        If Target.Value <> "" Then
            Target.Interior.ColorIndex = 6
        End If
    End Sub
    
    
    
    [/TD]
    [/TR]
    [/TABLE]
    
    [/FONT][/COLOR]
    استفاده از کد بالا شامل تمامی سلول ها میشه
    یعنی وقتی یک سلول سفید هم داده ای واردش میشه به عنوان ویرایش شده محسوب میشه
    در حالی که من میخوام این قابلیت تنها شامل سلول هایی باشه که اطلاعات توش وارد شده
    به بیان ساده تر :
    اگر من به انتهای سلول ها ردیف و ستونی اضافه کنم و اطلاعات وارد اون کنم ؛ هیچ اتفاقی نیوفته, اما حالا که اطلاعات وارد شد، اگه تغییری روی سلول هایی که حاوی اطلاعات هستند اتفاق افتاد اون سلول های لایت بشه.
    چه تغییری باید تو کد بالا داد تا این عملیات شامل سلول های خالی از اطلاعات نشه ؟
  • rasools13

    • 2017/01/20
    • 360
    • 80.00

    #2
    سلام
    کد ها را داخل یک شرط if به صورت ذیل قرار دهید
    کد PHP:
    Dim Cel As String
     Cel 
    Target.Address
    IF Cel $A$Or $B$1 then     
    If Target.Value <> "" Then
               Target
    .Interior.ColorIndex 6
         End 
    If
    End If 
    این باعث میشه فقط برای سلول های A1 و B1 کد اعمال بشه.... آدرس هر سلولی را که میخواهید به صورت آدرس دهی مطلق همانند نمونه به سطر IF اضافه کنید
    [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
    [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
    [/CENTER]

    کامنت

    • hasa2

      • 2015/01/09
      • 73
      • 56.00

      #3
      ممنون. ولی فکر کنم متوجه منظور من نشدید. این اون چیزی نیست که منظور من بود...

      من میخوام شرط کلا شامل سلول های خالی نشه
      و فقط شامل سلول های پر باشه ....اما سلولهای پر، مشخص نیست کدوما هستند که آدرس اونها رو به صورت مطلق بدم
      ضمنا سلولهای پر هم ثابت نیستند
      یعنی فرض کن الان سلول a1 حاوی اطلاعات و سلول b1 خالی و سفید هست ... حالا اگه من داخل سلول b1 چیزی بنویسم نباید شرط هایلایت کردن براش اتفاق بیوفته (چون خالی از اطلاعات بوده) اما اگه تغییری تو a1 بیوفته باید هایلایت بشه.
      بعد از وارد کردن اطلاعات در b1 الان سلولهای a1 و b1 حاوی اطلاعات هستند و فقط با تغییر این دو سلول باید هایلایت بشن و بقیه سلول ها چون سفید هستند اگه چیزی وارد بشه نباید اتفاقی بیوفته اما پس از وارد کردن اطلاعات اگه تغییری کرد سلول های لایت بشه
      .
      دقیقا مشکل من اینه که چون سلول های حاوی اطلاعات ثابت نیستند نمیتونم محدوده بهشون بدم
      دنبال دستوری میگردم که یا بتونه سلول های خالی رو خودش تشخیص بده و شرط رو براش اجرا نکنه
      یا دستوری که بیاد اول تمام سلول های حاوی اطلاعات رو پیدا کنه و بعد اون رو داخل شرط بزاره...

      کامنت

      • rasools13

        • 2017/01/20
        • 360
        • 80.00

        #4
        از حلقه for استفاده کنید یا for each
        یک محدوده رو چک کنید و بعد داخل آن با If. شرط خالی بودن سلول های محدوده رو بررسی کنید
        [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
        [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
        [/CENTER]

        کامنت

        • hasa2

          • 2015/01/09
          • 73
          • 56.00

          #5
          نوشته اصلی توسط rasools13
          از حلقه for استفاده کنید یا for each
          یک محدوده رو چک کنید و بعد داخل آن با If. شرط خالی بودن سلول های محدوده رو بررسی کنید
          میتونید یه فایل نمونه بدید ؟

          کامنت

          • rasools13

            • 2017/01/20
            • 360
            • 80.00

            #6
            شما فایل نمونه بزارید بهتره
            [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
            [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
            [/CENTER]

            کامنت

            • hasa2

              • 2015/01/09
              • 73
              • 56.00

              #7
              نوشته اصلی توسط rasools13
              شما فایل نمونه بزارید بهتره
              من نمیدونم چه جوری میشه ؛ برای همین گفتم شما اگه میتونید یه فایل نمونه قرار بدین از چیزی که مدنظرتون هست و پیشنهاد دادین.
              ممنونم

              کامنت

              • rasools13

                • 2017/01/20
                • 360
                • 80.00

                #8
                نوشته اصلی توسط hasa2
                من نمیدونم چه جوری میشه ؛ برای همین گفتم شما اگه میتونید یه فایل نمونه قرار بدین از چیزی که مدنظرتون هست و پیشنهاد دادین.
                ممنونم
                منظورم فایل نمونه از قالب کارتون تو اکسل نه vba
                اینکه کجا داده وارد بشه کجا هایلات شه و ..
                [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                [/CENTER]

                کامنت

                • hasa2

                  • 2015/01/09
                  • 73
                  • 56.00

                  #9
                  نوشته اصلی توسط rasools13
                  منظورم فایل نمونه از قالب کارتون تو اکسل نه vba
                  اینکه کجا داده وارد بشه کجا هایلات شه و ..
                  آهان
                  فایل نمونه رو ضمیمه کردم.
                  من میخوام اگه تو هرکدام از سلول های خالی اه چیزی وارد شد اتفاقی نیوفته
                  ولی اگه هر کدوم از سلول هایی که الان پر هستند ویرایش بشن های لایت بشن
                  قاعدتا میخوام در صورتی که سلول سفیدی اطلاعات واردش شد از این به بعد اون هم تو رنج شمارش بیاد و از حالا به بعد محتویات وارد شده اون هم اگر تغییر کرد ؛ های لایت بشه
                  فایل های پیوست شده

                  کامنت

                  • rasools13

                    • 2017/01/20
                    • 360
                    • 80.00

                    #10
                    آهان به این صورت می خواین
                    این نیازی به بررسی کلی سلول ها نداره و For و For each هم نمیخواد
                    از کد ذیل استفاده کنید
                    هر سلولی که ویرایش بشه در صورتی که برابر مقدار قبلیش نباشه هایلات میشه
                    فایل پیوست رو هم ببینید
                    کد PHP:

                    Private Sub Workbook_SheetChange(ByVal Sh As ObjectByVal Target As Range)
                        
                    Dim CelValue As Variant
                        Application
                    .EnableEvents False
                        CelValue 
                    Target.Value
                        Application
                    .Undo
                        
                    If Target.Value <> "" Then
                            
                    If Target.Value <> CelValue Then
                                Target
                    .Interior.ColorIndex 6
                                Target
                    .Value CelValue
                            End 
                    If
                        Else
                            
                    Target.Value CelValue
                        End 
                    If
                        
                    Application.EnableEvents True
                    End Sub 
                    فایل های پیوست شده
                    Last edited by rasools13; 2018/12/30, 01:09.
                    [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                    [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                    [/CENTER]

                    کامنت

                    • hasa2

                      • 2015/01/09
                      • 73
                      • 56.00

                      #11
                      ممنونم عالی شد!
                      فقط یه مشکل به وجود اومد. وقتی ردیف یا ستونی رو کلا حذف میکنیم ارور میده و دیگه روند عملکرد کد متوقف میشه

                      کامنت

                      • rasools13

                        • 2017/01/20
                        • 360
                        • 80.00

                        #12
                        این کد روخط اول بزار
                        کد PHP:
                        On error resume 
                        [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                        [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                        [/CENTER]

                        کامنت

                        • hasa2

                          • 2015/01/09
                          • 73
                          • 56.00

                          #13
                          ممنونم از پاسختون
                          این On error resume رو هرجا میزارم خطا میگیره
                          نتیجه رو در قالب یه فایل میتونید بفرستید ؟
                          پیشاپیش بینهایت ممنونم

                          کامنت

                          • rasools13

                            • 2017/01/20
                            • 360
                            • 80.00

                            #14
                            این کد رو بجای کدهای قبلی کپی کنید
                            کد PHP:
                            Private Sub Workbook_SheetChange(ByVal Sh As ObjectByVal Target As Range)
                                
                            Dim CelValue As Variant
                                Application
                            .EnableEvents False
                                CelValue 
                            Target.Value
                                Application
                            .Undo
                                On Error 
                            GoTo ExitHandeler
                                
                            If Target.Value <> "" Then
                                    
                            If Target.Value <> CelValue Then
                                        Target
                            .Interior.ColorIndex 6
                                        Target
                            .Value CelValue
                                    End 
                            If
                                Else
                                    
                            Target.Value CelValue
                                End 
                            If
                            ExitHandeler:
                                
                            Application.EnableEvents True
                            End Sub 
                            [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                            [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                            [/CENTER]

                            کامنت

                            • hasa2

                              • 2015/01/09
                              • 73
                              • 56.00

                              #15
                              واقعا ممنونم از پیگیری موضوع
                              اما با کد جدید باز مشکل جدیدی به وجود اومد!
                              کلا دیگه نمیشه ردیف یا ستونی رو حذف کرد!
                              به محض حذف کردن یک ردیف یا ستون در اکسل، دوباره ستون یا ردیف حذف شده بر میگرده!

                              کامنت

                              چند لحظه..