دنیس می خواهد سه سلول (A1:A3) را با مقادیر RGB پر کند و یک سلول دیگر (C1) رنگ را بر اساس آن مقادیر نشان دهد. او فکر می کند که آیا راه آسانی برای انجام این کار وجود دارد؟
ساده ترین راه برای انجام این کار استفاده از یک ماکرو است که مقادیر A1:A3 را می گیرد و سپس رنگ سلول C1 را بر اساس آن مقادیر تغییر می دهد. در حالت ایدهآل، ماکرو باید بررسی کند تا مطمئن شود که مقادیر در سلولهای منبع در محدوده 0 تا 255 قرار دارند. ماکرو زیر برای این منظور عالی عمل میکند:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A3")) Is Nothing Then
lRed = Abs(Range("A1").Value) Mod 256
lGreen = Abs(Range("A2").Value) Mod 256
lBlue = Abs(Range("A3").Value) Mod 256
Range("C1").Interior.Color = RGB(lRed, lGreen, lBlue)
End If
End Sub
توجه داشته باشید که این ماکرو باید به کد صفحه کاری که سلول ها در آن وجود دارند اضافه شود. (فقط روی برگه برگه کلیک راست کرده و View Code را انتخاب کنید، سپس ماکرو را در آنجا اضافه کنید.) این یک کنترل کننده رویداد است که هر بار که تغییری در سلول A1، A2 یا A3 ایجاد می شود، به طور خودکار اجرا می شود. با در نظر گرفتن مقدار مطلق محتویات سلول و استفاده از باقیمانده (مدول) تقسیم آن بر 256، مقادیر در آن سلول ها بین 0 تا 255 تضمین می شود.
ماکرو فقط زمانی کار می کند که به صورت دستی مقداری را در محدوده A1:A3 (مقادیر RGB خود) تغییر دهید. اگر مقادیر در آن محدوده نتیجه فرمول ها باشد، به درستی کار نمی کند زیرا شما به صورت دستی سلول ها را تغییر نمی دهید. در این صورت، باید از این اصلاح ساده تر ماکرو استفاده کنید:
Private Sub Worksheet_Change(ByVal Target As Range)
lRed = Abs(Range("A1").Value) Mod 256
lGreen = Abs(Range("A2").Value) Mod 256
lBlue = Abs(Range("A3").Value) Mod 256
Range("C1").Interior.Color = RGB(lRed, lGreen, lBlue)
End Sub
این نسخه هر زمان که چیزی در کاربرگ تغییر میکند، رنگ را بهروزرسانی میکند، صرفنظر از اینکه تغییر در کجا رخ میدهد.