Автоматическая вставка текущей даты в ячейку при вводе данных
Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А - в столбце 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) Когда "растягиваешь" то есть увеличиваешь число строк в "таблице", Дата НЕ Заполнялась автоматически в новые и старый ячейки-строки? ( то есть тяну, а он сразу вставляет дату+ еще и старые заменяет.
и 2) что бы дата НЕ вставлялась когда:
а) случайно активировал ячейку
и как сдлать так что бы: 3) Удалил значение удалилась дата
2. "Случайно" - это как? И чем будет отличаться от "не случайно"?
3. Написать еще один макрос аналогичного вида
2 и 3 не имеют смысла)))
но ни как не могу задать формат даты, надо чтоб указывал только день и месяц!
помогите
спасибо
Спасибо Александр
Подскажите кто нибудь
Можно ли как то усовершенствовать макрос, чтобы вместе с датой он вставлял в ещё одну соседнюю ячейку порядковые номера?
вношу изменения в А2, в В2 вставляется дата, в С2 номер 2 и т.д.
Постоянно сужаю в ручную, но при каждой работе макроса он опять расширяет.
Так понимаю, что надо мне что-то с автоподбором ширины сделать. Он почему-то определяет ее намного шире, чем надо))
P.S
В общем вставил закрепленный размер ширины ячейки, под свои запросы
Вместо
Где "С:С" это необходимая мне колонка, а "14" - размер
.EntireColumn.AutoFit
Моя проблема чуток другая. использую excel для учета платежей. расширять таблицу для ввода даты платежей считаю излишней. поэтому вот такой тюненг нужен для вашего макроса:
1. Писать дату не в отдельную ячейку, а в примечание к изменяемой ячейке.
2. Нужна какая то защита от случайного изменения значений платежей. Ну , предположим, перед внесением нового платежа нужно стареть прошлую дату, а иначе восстанавливается предыдущий платеж да еще и в красном цвете. Что то такое. Окошко с предупреждением вообще бы супер было.
3. При вставке в строки 5,6,7 макроса из поста выше (СердЖиГ 06.10.2012 16:54:49) у меня выводится синтаксическая ошибка.
Заранее благодарен. Ввиду полного не знания языка макросов прошу выложить полный макрос))
Помогите мне, пожалуйста. МНЕ НУЖНО СЛЕДУЮЩЕЕ
1 когда вводим ном. заказа рядом отобразилось время
2 когда вводим сумму рядом тоже отобразилось время
Заранее благодарен
Т.е. изменить "A2:A100" на "A2:A100,D2:D100"
если нужно, чтобы при заполнении определённой ячейки проставлялась дата в двух разных ячейках одновременно (напр, F9 и G11)?
Огромное спасибо за макрос, долго искал нечто подобное. Подскажите пожалуйста, что нужно изменить в макросе, чтобы дата и время изменения выводились в одну конкретную ячейку, например в M. Прочитал ветку, ответ на свой вопрос не нашел. Спасибо.
With Range("O" & cell.row)
на
With Range("M1")
При вставке этого кода .Value = Now сразу подсвечивается красным. Несмотря на это всё равно закрываю окно с кодом, выходит предупреждающее сообщение о баге. Ввожу в столбец А значение и выбрасывает обратно на код, где уже желтым выделено
Private Sub Worksheet_Change(ByVal Target As Range)
Николай помогите
Если для помощи нужно предоставить дополнительный код ошибки или что то в этом роде, скажите от куда его выдернуть
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target
If Not Intersect(cell, Range("A2:A100")) Is Nothing And _
Target.Offset(0, 1) = "" Then
With Target.Offset(0, 1)
.Value = Now
.EntireColumn.AutoFit
End With
End If
Next cell
End Sub
заранее благодарен
application-defined or object-defined error
Подскажите как прописать диапазон с большим количеством столбцов.
В экселе создан чек-лист с проставлением отметок о выполнении определенной последовательности действий, одно действие включает в себя два столбца, в одном ставится отметка в другом благодаря макросу ставится дата, таких пар столбцов уже 40 шт., максимально удалось указать диапазон для 27 пар столбцов, дальше появляется ошибка: runtime error 1004 method range of object worksheet failed
Большое Спасибо!
вот макрос:
Заранее благодарен
в ячейку cell.Offset(0, 2) вводился "текст"?
Скачал Ваш пример, даже редактор не открывал. Изменяю значения в диапазоне А2:А7 Вашего примера, ничего не происходит..
У меня Win7 64, MSO 2013 64. Машина тоже не слабая. Хотелось бы понять почему, спасибо!
Нужна помощь!
Спасибо за столь полезную информацию! Но у меня есть вопрос над которым я бьюсь уже больше недели и немогу разрешить. Буду счастлив если кто то сможет мне помочь и разрешить проблему... Попытаюсь описать детально.
Я воспользовался изложеными в форуме макросом и у меня внутри страницы он имеет следующий вид:
Макрос работает прекрасно, помещает дату в колонку "B" и время в колонку "C" при изменении ячеек в колонке "A," но с одним условием: если я изменяю колонку "А" вручную. А если я использую сторонюю программу вносящую изменения в колонку "A", то колонка "B" и "C" остаются без изменения и макрос не срабатывает... (использую программу сканирования штрих кодов Twedge).
Тот же самый эффект вы можете повторить без установки данной программы, достаточно приравнять ячейку в колонке "A" к любой ячейке в колонке "D". После внесения изменений в ячейку колонки "D" изменния автоматически отобразятся в ячейке "A", но при этом указанный выше макрос не сработает и не отобразит время и дату в отведенных для этого ячейках.
Буду искренне благодарен всем кто сможет мне помочь!!
Я бы вешал макрос на событие пересчета листа Worksheet.Calculate, который проверял бы заданный диапазон на предмет не появились ли в нем новые данные и при их появлении дописывал бы рядом дату-время.
Это в общих чертах. Точнее без конкретной задачи и файла не сказать.
Вы дали правильное направление... У меня получилось изменить макрос и привязать его для одной ячейки и даже если программа вставляет данные то все работает и появляется.
Вот только я новичок в этом деле и не могли бы вы мне подсказать как задать проверку не для одной ячейки а для всего столбца.... Вот мой макрос:
Private Sub Worksheet_Calculate()
Dim target As Range
Set target = Range("A3")
If target.Offset(0, 1).Value = "" Then
target.Offset(0, 1) = Date
target.Offset(, 2) = Format(Now, "hh:nn")
End If
End Sub
если я ставлю range(''A3:A100'') то у меня вечно появляется ошибка... я думаю, что возможно у меня проблемма с заданием типов переменых. Заранее спасибо буду очень блогадарен за помощь.
1.если мне нужно, чтобы дата и время проставлялись в нескольких диапазонах дат. Скажем, изменение в столбце А дает дату в столбце В, изменение в столбце С дает дату в столбце Е.
2.Пытаюсь скрыть столбцы с датами, чтобы их не было видно, но как только вношу новое значение, отображается столбец с датами. Как этого избежать?
Спасибо
Тут я заметил подходящий код для решение похожей проблемы только для даты и время.
и она будет вычисляться только один раз при вставке в ячейку, а не каждый раз при пересчете формул листа.