查找带有日期的行,固定列中的活动单元格并写入时间戳

时间:2019-05-14 15:56:54

标签: excel vba

我想创建一个Excel来记录一些时间(进入工作,退出晚餐...)。我坚决做到这一点的最佳方法是使用vba代码来表现出色。

我放置了一些botton(like in photo I upload)来记录一些重要的时间,并创建了一个表,其中包含每月的天数和要记录的事件。

但是,问题出在vba代码中。我在excel vba中非常不熟练,只能得到以下代码:

Sub time()

    ActiveCell.Value = Now

End Sub

在活动单元格中,此代码写时间戳。...但是我想要更高级的代码。例如,我有一个“ Enter to work”按钮,当我按下该按钮时,我想要它:

  • Excel查找行是指今天的日期
  • 找到“开始工作”列
  • 然后在此单元格中写入时间戳(小时:分钟:秒)

我不知道该怎么做。谁能帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作。首先,您将获得日期的最后一行,而不仅仅是使用循环循环并比较工作表上的日期与返回当前日期的Now()函数。然后,您可以使用offset将时间写入下一个单元格。您可以将宏分配给spredsheet上的按钮,并且每次都会触发。我猜您可以在尝试写入之前放置另一个if语句来检查单元格中是否有值,以避免覆盖数据。请注意,工作表上的日期格式应为14/05/2019

Option Explicit
Sub FillInForm()
Dim WS As Worksheet
Dim i As Long
Dim LRow As Long
Dim dateFormatter As String
Dim xDate As Date

  Set WS = ActiveSheet
  dateFormatter = Format(Now, "dd/mm/yyyy")
  xDate = CDate(dateFormatter)

    With WS
        LRow = .Range("B" & .Rows.Count).End(xlUp).Row

        For i = 5 To LRow
             If CDate(.Range("B" & i).value) = CDate(xDate) Then
                    If .Range("B" & i).Offset(0, 1).value = vbNullString Then
                        .Range("B" & i).Offset(0, 1).value = VBA.DateTime.Time
                    End If
             End If
        Next i
    End With
End Sub