جرمی مشکلی را مطرح کرد که بر اساس دو سلول A1 و C1 است. این سلول ها به ترتیب حاوی اینچ و میلی متر طراحی شده اند. جرمی راهی می خواهد که شخصی بتواند مقداری را در A1 وارد کند و در C1 به میلی متر تبدیل شود. برعکس، آنها می توانند مقداری را در C1 وارد کنند و در A1 به اینچ تبدیل شود.
انجام تبدیل، البته، مشکل واقعی نیست. مشکل این است که اگر شخصی مقداری را در A1 وارد کند، آن مقدار هر فرمولی را که ممکن است در آن سلول باشد، بازنویسی میکند و به این معنی است که هر مقدار بعدی که در سلول C1 وارد میشود، تبدیل مورد نیاز را در A1 که قبلاً رونویسی شده است، نمیدهد.
چند راه مختلف وجود دارد که می توان به این موضوع نزدیک شد. اگر مشکلی ندارید که طراحی کاربرگ خود را به دو سلول دیگر گسترش دهید، این سلول ها می توانند به طور اکید برای ورودی و سلول های A1 و C1 به طور دقیق برای خروجی استفاده شوند. یکی از سلولهای ورودی میتواند حاوی مقداری باشد که باید تبدیل شود و دیگری میتواند حاوی واحد اندازهگیری مقدار ورودی (مثلاً در یا میلیمتر) باشد.
البته، اگر میخواهید واقعاً خود را به دو سلول محدود کنید، باید برای انجام تبدیل واقعی به استفاده از ماکروها متوسل شوید. میتوانید از یک رویداد کاربرگ استفاده کنید که هر بار که یک مقدار سلول تغییر میکند فعال میشود، و کنترلکننده رویداد میتواند بررسی کند که سلول در حال تغییر A1 یا C1 است. ماکرو زیر مثالی از نحوه عملکرد این کار ارائه می دهد:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Select Case Target.Address
Case "$A$1"
[C1] = [A1] * 25.4
Case "$C$1"
[A1] = [C1] / 25.4
End Select
Application.EnableEvents = True
End Sub
توجه داشته باشید که لازم نیست هیچ فرمولی در سلول های A1 یا C1 داشته باشید. فرمول ها در خود ماکرو هستند. اگر تغییری در سلول A1 ایجاد شود (اینچ توسط کاربر وارد می شود)، سپس مقدار سلول C1 توسط ماکرو تغییر می کند. به همین ترتیب، اگر تغییری در سلول C1 ایجاد شود (میلیمتر توسط کاربر وارد می شود)، مقدار سلول A1 توسط ماکرو تغییر می کند. تغییر در هر سلول دیگری غیر از A1 یا C1 توسط ماکرو نادیده گرفته می شود.