Vinay از یک کاربرگ اکسل برای ورود داده ها استفاده می کند. اطلاعات در ستون A وارد می شود و Vinay می خواهد راهی برای اضافه کردن خودکار زمانی به ستون B، مجاور مقدار وارد شده در ستون A، داشته باشد که نشان می دهد چه زمانی مقدار وارد شده است.
چندین راه مختلف برای انجام این کار وجود دارد. اولین مورد این است که با انتخاب سلول مجاور در ستون B و فشار دادن Ctrl+Shift+ زمان را به صورت دستی وارد کنید. (این نقطه ویرگول است). این میانبر زمان فعلی را در سلول وارد می کند. البته مشکل این روش این است که خودکار نیست و برای پیاده سازی آن نیاز به حرکت و فشار کلید اضافی است.
یک رویکرد بهتر استفاده از یک فرمول برای وارد کردن زمان است. تابع NOW تاریخ و زمان فعلی را برمی گرداند و می توانید از آن در یک سلول به این شکل استفاده کنید:
=NOW()
البته این فرمول ساده با هر بار محاسبه مجدد کاربرگ به روز می شود. این بدان معناست که هر بار که مقداری را در ستون A وارد می کنید، تابع زمان جاری را برمی گرداند. این نامطلوب است زیرا نمی خواهید زمان های قبلی به روزرسانی شوند. می توانید سعی کنید از یک فرمول برای بررسی اینکه آیا چیزی در ستون A وجود دارد یا خیر استفاده کنید، مانند این روش:
=IF(A3="","",IF(B3="",NOW(),B3))
مشکل این است که فرمولی مانند این یک مرجع دایره ای را به کاربرگ معرفی می کند که چالش های زیادی را برای کار با آن ارائه می کند. یک رویکرد بهتر، ایجاد یک ماکرو است که هر بار که چیزی در ستون A وارد می شود، به طور خودکار اجرا می شود. روی برگه کاربرگ مورد استفاده برای ورود داده ها کلیک راست کرده و View Code را از منوی زمینه انتخاب کنید. پنجره کد مربوط به کاربرگ را در ویرایشگر ویژوال بیسیک خواهید دید و سپس این را در پنجره وارد کنید:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rCell As Range
Dim rChange As Range
On Error GoTo ErrHandler
Set rChange = Intersect(Target, Range("A:A"))
If Not rChange Is Nothing Then
Application.EnableEvents = False
For Each rCell In rChange
If rCell > "" Then
With rCell.Offset(0, 1)
.Value = Now
.NumberFormat = "hh:mm:ss"
End With
Else
rCell.Offset(0, 1).Clear
End If
Next
End If
ExitHandler:
Set rCell = Nothing
Set rChange = Nothing
Application.EnableEvents = True
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
با وجود ماکرو، هر زمان که چیزی را در سلولی در ستون A وارد می کنید، سلول مجاور در ستون B حاوی تاریخ و زمان خواهد بود (فرمت شده برای نشان دادن فقط زمان). اگر چیزی را در ستون A حذف کنید، سلول مجاور در ستون B نیز پاک می شود.