Автоматическая вставка текущей даты в ячейку при вводе данных
Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А - в столбце B напротив введенного заказа автоматически появлялись дата и время его занесения:
Чтобы реализовать такой ввод даты, нам потребуется простой макрос, который надо добавить в модуль рабочего листа. Для этого щелкните правой кнопкой мыши по ярлычку листа с таблицей и выберите в контекстном меню команду Исходный текст (View code).
В открывшееся окно редактора Visual Basic скопируйте этот текст этого макроса:
Private Sub Worksheet_Change(ByVal Target As Range) For Each cell In Target 'проходим по всем измененным ячейкам If Not Intersect(cell, Range("A2:A100")) Is Nothing Then 'если изменененная ячейка попадает в диапазон A2:A100 With cell.Offset(0, 1) 'вводим в соседнюю справа ячейку дату .Value = Now .EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке End With End If Next cell End Sub
При необходимости измените "чувствительный" диапазон "А2:А100" на свой собственный. Если необходимо вставлять дату не в соседний столбец, а правее - подставьте в оператор Offset(0,1) вместо 1 число побольше.
Закройте редактор Visual Basic и попробуйте ввести что-нибудь в диапазон А2:А100. В соседней ячейке тут же появится текущая дата-время!
Ссылки по теме
- Как сделать выпадающий календарь для быстрого ввода любой даты мышью в любую ячейку.
- Как Excel работает с датами
- Что такое макрос, как он работает, куда копировать текст макроса, как запустить макрос?
1) Добавить возможность при удалении данных из строки удалить и дату в соответствующей строке, получалось сделать через следующую конструкцию:
В общем у меня на данном этапе получилось "собрать" следующее:
а) Удаляет дату только при удалении последней строки (если удалить, например, строчку предпоследнюю, то дата сохранится в столбце А);
б) Аналогично изменение даты - если последняя строка - то при изменении данных меняется и дата в ячейке А.
Поэтому интересует, как можно учесть все эти недочеты (чтобы удалять можно было дату+данные по строке с любого места и и менять даже последнюю строку без изменения времени) в данном макросе выше?
Также еще искал, как эти возможности (удаление в ячейке данных и даты к ней + изменение ячейки данных без изменения даты к ней) "приклеить" к этому макросу:
В VBA не силен, но уж больна нравится идея и возможности ее воплощения. Если кто подскажет что и как дописать, буду премного благодарен!
Как откоректировать макрос чтобы дата изменялась при изменении ячейки в которой находится формула? Для меня критично.
Спасибо большое за ответ.
Так как в програмировании я полный ноль прошу показать полный код.
Спасибо большое!!! Вы меня очень выручите. Я давно являюсь фаном сайта.
Буду благодарна за ответ.
вот макрос
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target
If cell <> "" Then
If Not Intersect(cell, Range("E3:E151,H3:H151,K3:K151,N3:N151,Q3:Q151,T3:T151,W3:W151,Z3:Z151,AC3:AC151,AF3:AF151,AI3:AI151,AL3:AL151,AO3:AO151,AR3:AR151,AU3:AU151,AX3:AX151,BA3:BA151,BD3:BD151,BG3:BG151,BJ3:BJ151,BM3:BM151,BP3:BP151,BS3:BS151,BV3:BV151,BY3:BY151,CB3:CB151,CE3:CE151"
With cell.Offset(0, 2)
.Value = Now
.EntireColumn.AutoFit
End With
End If
End If
Next cell
End Sub
В строку "If Not Intersect(cell, Range" вставив еще пару столбико выскакивает ошибка, и строка выделяться жёлтым
Можно как-то остановить выполнение макроса темы, а после всех операций удаления/копирования, снова включить.
P.S. Возможно мой макрос не идеальный, поэтому прошу отнестись снисходительно.
Заранее благодарю.
Вопрос такого плана: дата вставляется в формате dd.mm.yy hh:mm Затем нужно фильтровать данные по нескольким параметрам с помощью макроса. Условие отбора вводится в UserForm, TextBox. Вот фрагмент кода
Пробовал так
ОБОЛДЕННЫЙ САЙТ!!!!!!!!
Мне очень помогает в роботе!!!!! СПАСИБО!!!!
У меня один вопрос по поводу макросов вообще.....
Я выкладываю свою таблицу(уже с Вашими апгрейдами, макросами) на сервер(общий диск) и его должны на протяжении года заполнять мои сотрудники(с разных ПК). Вопрос: На сколько моему файлу или ПК(каждого сотрудника) грозит опасность если каждому сотруднику на ПК отключить "защиту" от поддержки макросов? (Windows 7).
P.S. Я не силен в Excel, все таблицы самоучно с Ваших уроков!!!!
Наперед благодарен за ответ!
Насчет вашего вопроса могу сказать, что у меня на всех моих компьютерах всегда была эта защита отключена и за последние 10 лет никаких макровирусов я не встречал. Антивирус-то у вас на компьютере полюбому уже есть, правильно?
в столбце G построчно добавляешь записи, соседняя слева ячейка выпаливает "непустоты" и как только находит значение, в столбце F, рядом, вставляется дата.
Это было очевидно, что данные будут пересчитываться, но я об этом не задумывался и честно - удивился.
Сейчас попытаюсь найду решение этой проблемы и обязательно отпишусь!
*задумчиво нырнул в гугл*
Возможно этот вопрос уже звучал, заранее прошу прощение за повтор.
Что необходимо подправить в моем макросе дабы:
1. столбец с датой и временем нельзя было редактировать (т.е. чтоб сотрудник, который заполняет инф., не мог "ручками" изменить время и дату);
2. при удалении информации в строке так же удалялась и дата/время.
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target
If Not Intersect(cell, Range("A3:A1000000")) Is Nothing Then
With cell.Offset(0, 17)
.Value = Now
.EntireColumn.AutoFit
End With
End If
Next cell
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target 'проходим по всем измененным ячейкам
If Not Intersect(cell, Range("D2:D100,E2:E100")) Is Nothing Then 'если изменененная ячейка попадает в диапазон A2:A100
With cell.Offset(0, 2) 'вводим в соседнюю справа ячейку дату
.Value = Now
.EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
End With
End If
Next cell
End Sub
Не работает, выдает ошибку
Run time 1004 Method Range of object Worksheet failed или вообще ничего не происходит
Макрос действительно очень полезный и удобный.
Большое спасибо.
Только есть несколько моментов, которые никак не могу реализовать:cry:.
Буду очень благодарен за помощь.
Таблица предназначена для двух групп пользователей, которые соответственно редактируют левую и правую часть таблицы отдельно:
первая вносит данные в колонку В, вторая группа в колонку К.
Следовательно, при заполнении пользователем первой группы ячейки колонки B,
появляется текущая дата и время в колонке F, а имя пользователя в колонке I,
далее,
при заполнении пользователем второй группы ячейки колонки K, появляется имя пользователя в колонке L, а дата и время в колонке M.
Никак не могу реализовать эти два условия в этом коде.
Помогите!!!
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target 'проходим по всем измененным ячейкам
If Not Intersect(cell, Range("B2:B100,K2:K100";) Is Nothing Then 'если изменененная ячейка попадает в диапазон A2:A100
With cell.Offset(0, 4) 'вводим в соседнюю справа ячейку дату
.Value = Now
.EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
End With
cell.Offset(0, 7) = Application.UserName
cell.Offset(0, 1) = Application.UserName
End If
Next cell
End Sub
Зашла сюда с этой темы и хоть это и моветон, но повторюсь, так как из комментов выше так и не поняла, что сделать, что бы дата вставлялась не только при ручном изменении ячейки. Если это невозможно, просто напишите пожалуйста, и думаю, вопросов больше не будет.
У меня ячейка изменяется при помощи копирования или протягивания нумерации.
проблема в следующем : когда файл загружаю onedrive чтобы мой коллега одновременно мог работать над файлом ... вообщем не работает он через браузер.
Посоветуйте может как то изменить макрос чтобы работал на onedrive? или посоветуйте другой способ редактирование екселя нескольким человекам одновременно .
Спасибо за пример.
Необходимо что бы не только из диапазона A но и из другого диапазона вставлялась дата в колонку B .
Спасибо
Хочу выразить свою признательность автору за прекрасный интернет-ресурс. Спасибо !
Конечно же, "не просто так" я пишу свой комент
Макрос прекрасен и экономит кучу времени и нервов. Но, у меня возник вопрос в моём конкретном случае т.к. я совсем ни чего не понимаю в макросах. Ваш макрос записан в следующем виде...
Использую "Умную таблицу" (Format as Table) и всё прекрасно работает без задержек, но есть маленький пунктик который нервирует моих пользователей таблицей - после заполнения полей в строке и нажатии "Tab", что-бы ввести новую строку, макрос естествено "определяет" изменения и тут же прописывает дату и время в колонку "С". Это от макроса и требуется, но только в процессе заполнения полей в "А"... Как мне устранить этот маленький недочёт ?!
Заранее благодарен.
Подскажите, как к описанному макросу добавить возможность при вводе нового значения в соседнем столбике считать временной интервал между введенным и предыдущим значениями (и при вводе первого значения в этом столбе ставить просто нулевой интервал)?