رخداد Change کاربرگ (اکسل)

رخداد Change زمانی رخ می‌دهد که سلول‌های کاربرگ توسط کاربر یا یک پیوند خارجی تغییر می‌کند.

دستور اجرا

expression.Change (Target)

expression متغیری است که یک شی Worksheet را نمایندگی می‌کند.

آیا می‌دانید:

یادگیری ماکرونویسی و تسلط بر دستورات VBA در اکسل می‌تواند به شما کمک کند تا فرآیندهای تکراری را به‌طور کامل خودکار کنید؛ به‌طوری که با استفاده از ویژوال بیسیک و آموزش‌های مرتبط با آن، می‌توانید نمونه کدهای کارآمد ایجاد کرده و از آن‌ها در انجام کارهای پیچیده استفاده کنید و در نهایت بهره‌وری خود را به طرز چشم‌گیری افزایش دهید.

پارامتر‌ها

ناماجباری/اختیارینوع دادهتوضیحات
TargetاجباریRangeمحدوده تغییر یافته؛ می تواند بیش از یک سلول باشد.

مقدار بازگشتی

ندارد.

ملاحظات

رخداد Change هنگامی که مقدار سلول‌ها در طول محاسبه مجدد تغییر می‌کند، رخ نمی‌دهد. برای این منظور باید از رویداد Calculate برای فعال کردن محاسبه مجدد کاربرگ استفاده نمایید.

ویدئوی آموزشی

مثال

کد زیر با استفاده از رخداد Change مقادیر ورودی کاربر را اعتبارسنجی می‌کند و در صورت لزوم با ایجاد یک کامنت هشدار لازم را به کاربر ارسال می‌کند.


Private Sub Worksheet_Change(ByVal Target As Range)
 Dim boolCheck As Boolean
 Dim strMessage As String
 Dim rngCell As Range

    ' Clear existing formats and comments
    Target.Interior.Pattern = xlNone
    Target.ClearComments
    Target.Font.Color = vbBlack
    
    ' Exit if more than one cell is changed or if the cell is empty
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    
    boolCheck = False
    
    ' Check if Target is within the specific ranges and validate
    If Not Application.Intersect(Target, Me.Range("A2:A10")) Is Nothing Then
        strMessage = "Please fill the Cell with a valid name"
        If Not Target.Value Like "[A-Za-z ]*" Then
            boolCheck = True
        End If
    ElseIf Not Application.Intersect(Target, Me.Range("B2:B10")) Is Nothing Then
        strMessage = "Employee ID must be ten digits long"
        If Not Target.Value Like "[0-9]*" Or Len(Target.Value) <> 10 Then
            boolCheck = True
        End If
    ElseIf Not Application.Intersect(Target, Me.Range("C2:C10")) Is Nothing Then
        strMessage = "The salary month must be a number between 1 and 12"
        If Not Target.Value Like "[0-9]*" Or CInt(Target.Value) < 1 Or CInt(Target.Value) > 12 Then
            boolCheck = True
        End If
    ElseIf Not Application.Intersect(Target, Me.Range("D2:D10")) Is Nothing Then
        strMessage = "Activity days must be a number between 0 and 31"
        If Not Target.Value Like "[0-9]*" Or CInt(Target.Value) < 0 Or CInt(Target.Value) > 31 Then
            boolCheck = True
        End If
    End If
    
    ' If validation fails, add comment and change formatting
    If boolCheck Then
        Target.AddComment strMessage
        Target.Interior.Color = vbRed
        Target.Font.Color = vbWhite
    End If
End Sub

دیدگاهتان را بنویسید