Найти строку с датой, активной ячейкой в ​​фиксированном столбце и записать отметку времени - PullRequest
0 голосов
/ 14 мая 2019

Я хочу создать Excel для записи несколько раз (войти на работу, выйти на ужин ...).Я старался сделать это лучше всего с помощью кода VBA.

Я положил несколько бутылок (, как на фотографии, которую я загружаю ), чтобы записать несколько важных моментов, и я создаю таблицу с днями в месяце и событиями для записи.

Но проблема в коде VBA.Я очень неопытен в Excel vba и получаю только этот код:

Sub time()

    ActiveCell.Value = Now

End Sub

В активной ячейке этот код записывает метку времени .... Но я хочу более сложный код.Например, у меня есть кнопка «Enter to work», и я хочу, чтобы я нажимал на нее:

  • В строке поиска Excel указывается сегодняшняя дата
  • Найти столбец «Enter to work»
  • И написать метку времени (час: минута: секунда) в этой ячейке

Я не знаю, как это сделать.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете сделать что-то вроде ниже.Сначала вы получите последнюю строку вашей даты, чем просто используйте цикл для циклического просмотра и сравнения даты на листе с функцией Now(), которая возвращает сегодняшнюю дату.Затем вы можете использовать offset, чтобы записать время в следующую ячейку.Вы можете назначить макрос кнопкам на электронной таблице, и они будут срабатывать каждый раз.Я предполагаю, что вы можете поместить другой оператор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...