Семейство программного обеспечения Майкрософт для работы с электронными таблицами, оснащенное инструментами для анализа, построения диаграмм и обмена данными.
Файл загрузил. Постараюсь сегодня-завтра поработать над ним.
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Здравствуйте!
Есть "умная таблица" в Экселе с заголовками и макросами.
Столбец А - "№ п/п". Заполняется автоматически формулой =СТРОКА()-1 при добавлении новой строки.
Столбец B - "Дата". Дата оформления заказа. Заполняется автоматически с помощью макроса, когда в соседней ячейке в столбце C появляется хоть какой-то текст. Формат ДД.ММ.ГГГГ
Столбец С - "Номер заказа". Пишется вручную.
Столбец D - "Сумма". Пишется вручную.
Столбец E - "Доп. продажи". Пишется вручную. В зависимости от того, была доп.продажа или нет, в ячейку ставится или сумма доп.продажи, или она остается пустой.
Столбец F - "Клиент". Пишется вручную.
Столбец B заполняется с помощью следующего макроса, как только в соседнюю ячейку в столбце C вносятся данные (номер заказа):
Private Sub Worksheet_Change(ByVal Target As Range) Dim WorkRng As Range Dim Rng As Range Dim xOffsetColumn As Integer Set WorkRng = Intersect(Application.ActiveSheet.Range("C:C"), Target) xOffsetColumn = -1 If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then Rng.Offset(0, xOffsetColumn).Value = VBA.Date Rng.Offset(0, xOffsetColumn).NumberFormat = "DD.MM.YYYY" Else Rng.Offset(0, xOffsetColumn).ClearContents End If Next Application.EnableEvents = True End If End Sub
Проблема: когда я пытаюсь заполнять таблицу с помощью простой формы (вызываемой с помощью кнопки на Панели быстрого доступа), дата в форме должна писаться вручную. Если ее пропустить, при сохранении записи в строке таблицы на месте даты остается пустая ячейка. Чтобы там появилась дата, надо отредактировать вручную ячейку C ("Номер заказа"). При этом столбец A в форме вообще не предусматривает ручного ввода. Как сделать так, чтобы вышеприведенный макрос работал и при заполнении таблицы с помощью формы?
Семейство программного обеспечения Майкрософт для работы с электронными таблицами, оснащенное инструментами для анализа, построения диаграмм и обмена данными.
Заблокированный вопрос. Этот вопрос был перенесен из сообщества службы поддержки Майкрософт. Вы можете проголосовать о его полезности, но не можете добавлять комментарии или ответы, а также подписаться на этот вопрос.
Файл загрузил. Постараюсь сегодня-завтра поработать над ним.
https://1drv.ms/x/s!Aqw2y54zadyx-WI3Klwfc0CrMNHZ?e=c6Eh3m
Лист "Осн. таблица"
Там два макроса. Первый касается соседствующей рядом сводной таблицы - обновляет дату в фильтре на самую новую из найденных в основной таблице. Второй макрос - автозаполнение даты при ручном вводе данных в основную таблицу. Нужно, чтобы этот второй макрос работал и при вводе данных в основную таблицу через форму (хоть простую, хоть пользовательскую)
Здравствуйте, Мария Аристова
Залейте файл-пример на файлообменник. Попробуем решить проблему:)
Пробовала поменять код на тот, который предложили вы. Тогда он вообще прекращает работать - перестает автоматически добавлять дату в столбец B. Даже при заполнении таблицы вручную
Привет Мария
Меня зовут АннаТомас, и я буду рада помочь вам с вашим вопросом. На этом форуме мы являемся такими же потребителями Майкрософт, как и вы.
Одним из возможных решений может быть изменение макроса для проверки изменений в любом из столбцов в строке, а не только в столбце C. Можно также изменить форму, чтобы убедиться, что значение всегда вводится в столбец C, прежде чем пользователь сможет отправить форму.
Частная подводная Worksheet_Change (цель ByVal в диапазоне) Dim WorkRng As Range Дим ГС Как Диапазон Dim xOffsetColumn As Integer Set WorkRng = Intersect(Application.ActiveSheet.Range("A:F"), Target) xOffsetColumn = 1 Если не workrng - это ничто, то Application.EnableEvents = False Для каждого ГСЧ в WorkRng Если Rng.column = 3, а не VBA. IsEmpty(Rng.Value) Тогда Rng.Offset(0; xOffsetColumn). Значение = VBA. Дата Rng.Offset(0; xOffsetColumn). NumberFormat = "ДД.ММ.ГГГГ" Закончить, если Следующий Application.EnableEvents = True Закончить, если Конечная субмарина
Я надеюсь, что это поможет ;-), дайте мне знать, если это противоречит тому, что вам нужно, я все равно буду полезен, чтобы ответить на больше ваших вопросов.
Всего хорошего
АннаТомас
Отдайте должное сообществу. Помогите следующему человеку с этой проблемой, указав, решил ли этот ответ вашу проблему. Нажмите Да или Нет внизу.
Этот ответ был автоматически переведен.В результате могут быть грамматические ошибки или некорректные выражения?