Wendy یک کاربرگ دارد که اطلاعات کمی در آن وجود دارد، با داده های اصلی در محدوده C3:P312. او مایل است یک ماکرو داشته باشد که اگر روی سلولی در این محدوده داده کلیک کند، یک "x" را در سلول قرار دهد.
هیچ رویدادی وجود ندارد که اکسل بتواند آن را به عنوان "کلیک" روی یک سلول تشخیص دهد. شاید نزدیکترین رویداد، رویداد SelectionChange باشد که هر بار که انتخاب سلول تغییر می کند، فعال می شود. سپس کنترل کننده رویداد می تواند بررسی کند که سلول انتخاب شده در محدوده C3:P312 قرار دارد و سپس در صورت وجود یک "x" در سلول قرار دهد. کنترل کننده رویداد زیر این کار را انجام می دهد:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rInt As Range
Dim rCell As Range
Set rInt = Intersect(Target, Range("C3:P312"))
If Not rInt Is Nothing Then
For Each rCell In rInt
rCell.Value = "x"
Next
End If
Set rInt = Nothing
Set rCell = Nothing
End Sub
با این حال، این رویکرد مشکلی دارد: نه تنها رویداد SelectionChange هنگامی که روی سلول دیگری کلیک می کنید فعال می شود، بلکه اگر از صفحه کلید برای جابه جایی از یک سلول به سلول دیگر در کاربرگ استفاده کنید، فعال می شود. این بدان معناست که اگر از صفحه کلید برای حرکت در کاربرگ استفاده کنید، در هر سلولی که انتقال می دهید دنباله ای از کاراکترهای "x" باقی می ماند.
یک راه حل این مشکل، تغییر رویدادی است که باعث بررسی و تغییر سلول ها می شود. در حالی که اکسل رویداد "کلیک" ندارد، رویداد "دوبار کلیک" وجود دارد. این بدان معنی است که شما می توانید سلولی را که روی آن دوبار کلیک می کنید تغییر دهید، همانطور که در اینجا نشان داده شده است:
Private Sub Worksheet_BeforeDoubleClick( _
ByVal Target As Range, Cancel As Boolean)
Dim rInt As Range
Dim rCell As Range
Set rInt = Intersect(Target, Range("C3:P312"))
If Not rInt Is Nothing Then
For Each rCell In rInt
rCell.Value = "x"
Next
End If
Set rInt = Nothing
Set rCell = Nothing
Cancel = True
End Sub