Попытка создать таймер запуска / остановки с помощью макроса Excel

2023
Mel

Я новичок в создании макросов в Excel и пытаюсь понять VBA, разбирая макросы, созданные другими.

Сейчас я пытаюсь создать своего рода таймер запуска / остановки, чтобы измерить, сколько времени тратится на разные проекты и на разные задачи внутри проектов.

Я хочу, чтобы мой пользователь выбрал проект (из выпадающего меню, созданного мной в A2) и тип задачи (также из выпадающего списка, расположенного в B2), а затем нажмите кнопку «Пуск» (все на листе 1). Затем будет запущен макрос, чтобы перенести эти два ввода в следующую доступную строку на листе 2 (столбцы A и B), а затем ввести текущую дату (столбец C) и текущее время (столбец D). Когда они закончили работать, они нажимают другую кнопку «Стоп» (также на листе 1), чтобы вставить текущее время в столбец Е листа 2 (та же строка, что и данные, использованные для «запуска»).

Так что нужно:

Нажмите на кнопку Пуск

  • Скопируйте значения A2 и B2 в следующую пустую строку на листе 2
  • В столбце C этой же строки введите текущую дату.
  • В столбце D той же строки введите текущее время

Нажмите на кнопку Стоп

  • В (в той же строке, что и другие только что добавленные данные) в столбце E введите текущее время

  • Или последняя строка D, которая имеет значение ввода текущего времени в E

Я пытался использовать это:

'Start Button  'Determine emptyRow  ActiveWorkbook.Sheets("Sheet2").Select  emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1   'Transfer information  Cells(emptyRow, 1).Value = A2.Value  Cells(emptyRow, 2).Value = B2.Value  Cells(emptyRow, 3).Value = Today().Value  Cells(emptyRow, 4).Value = Time().Value 

(Разные макросы)

'Stop Button  'Make Sheet2 active  Sheet2.Activate  'Determine emptyRow  ActiveWorkbook.Sheets("Sheet").Select  emptyRow = WorksheetFunction.CountA(Range("E:E")) + 1   'Input Stop Time  Cells(emptyRow, 5).Value = Time().Value 

И используя это:

'Start Button  Sheets(“Sheet1”).Select  Range(“A2”).Copy  Sheets(“Sheet2”).Select  emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1  ActiveSheet.Paste 

Они не ошиблись, но и не сработали, так что я знаю, что что-то упустил.

0
Форматирование очень помогло бы ... я не понимаю, зачем вам нужен таймер. Что произойдет, если вы не нажмете стоп, когда делаете это в своем примере? Dave 7 лет назад 0
«Они не ошиблись, но и не работали» - что они делают? Ваш вопрос сейчас очень расплывчатый. Пожалуйста, отладьте ваш код и сообщите нам, где он ведет себя неправильно. Máté Juhász 7 лет назад 1
Этот набор кода не стал красным в окне редактирования и не привел к сообщению «ошибка / отладка». Когда я запускаю его, хотя (нажмите на кнопку, к которой он прикреплен), он не делает то, что я ожидаю (копировать / вставить). Насколько я могу судить, это никак не влияет ни на один из листов. Mel 7 лет назад 0
Общая цель состоит в том, чтобы записать, сколько времени потрачено на разные проекты, а в рамках этих проектов - сколько времени потрачено на разные задачи. С помощью кнопок «Пуск» и «Стоп» создается текущий журнал времени запуска / остановки для проектов / задач. Эти данные затем поступают на другой лист (который основан на «традиционной» формуле), который объединяет все точки данных в сводную информацию, основанную на проекте / задаче. Mel 7 лет назад 0
Если кто-то не нажимает кнопку «Стоп» в конце, эта точка данных (строка) становится «бесполезной» (или позже ее придется манипулировать вручную). Поэтому E (время остановки), вероятно, должно смотреть на последнюю строку со значением в D (время начала), в отличие от "следующей пустой ячейки в E". Если я смогу настроить базовую настройку на работу, я всегда мог бы добавить что-нибудь позже, чтобы выскочить сообщение, если вы попытаетесь закрыть книгу или снова нажать кнопку «Пуск», не нажимая сначала кнопку «Стоп» (хотя это не так важно) , Mel 7 лет назад 0

1 ответ на вопрос

0
Mel

Я еще немного почитал и повозился, и это, возможно, не самый лучший способ, но он работает для того, что мне нужно для кнопки «Пуск».

Private Sub CommandButton1_Click()  Dim lst As Long Sheets("Sheet1").Range("A2:B2").Copy With Sheets("Sheet2") lst = .Range("A" & Rows.Count).End(xlUp).Row + 1 .Range("A" & lst).PasteSpecial xlPasteColumnWidths .Range("A" & lst).PasteSpecial xlPasteValues End With   With Sheets("Sheet2") lst = .Range("C" & Rows.Count).End(xlUp).Row + 1 .Range("C" & lst).Value = Date End With  With Sheets("Sheet2") lst = .Range("D" & Rows.Count).End(xlUp).Row + 1 .Range("D" & lst).Value = Time() End With   End Sub 

Похожие вопросы