Как обеспечить работу макроса при заполнении формы?

Анонимные
2023-02-28T19:28:33+00:00

Здравствуйте!
Есть "умная таблица" в Экселе с заголовками и макросами.
Столбец А - "№ п/п". Заполняется автоматически формулой =СТРОКА()-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 в форме вообще не предусматривает ручного ввода. Как сделать так, чтобы вышеприведенный макрос работал и при заполнении таблицы с помощью формы?

Microsoft 365 и Office | Excel | Для дома | Windows
Microsoft 365 и Office | Excel | Для дома | Windows

Семейство программного обеспечения Майкрософт для работы с электронными таблицами, оснащенное инструментами для анализа, построения диаграмм и обмена данными.

Заблокированный вопрос. Этот вопрос был перенесен из сообщества службы поддержки Майкрософт. Вы можете проголосовать о его полезности, но не можете добавлять комментарии или ответы, а также подписаться на этот вопрос.

Комментариев: 0 Без комментариев

Ответы: 13

Сортировать по: Наиболее полезные
  1. Alexandr Smirnoff 69,970 Баллы репутации Модератор-волонтер
    2023-03-01T09:31:31+00:00

    Файл загрузил. Постараюсь сегодня-завтра поработать над ним.

    Этот ответ помог вам?

    Комментариев: 0 Без комментариев
  2. Анонимные
    2023-03-01T09:12:22+00:00

    https://1drv.ms/x/s!Aqw2y54zadyx-WI3Klwfc0CrMNHZ?e=c6Eh3m

    Лист "Осн. таблица"
    Там два макроса. Первый касается соседствующей рядом сводной таблицы - обновляет дату в фильтре на самую новую из найденных в основной таблице. Второй макрос - автозаполнение даты при ручном вводе данных в основную таблицу. Нужно, чтобы этот второй макрос работал и при вводе данных в основную таблицу через форму (хоть простую, хоть пользовательскую)

    Этот ответ помог вам?

    Комментариев: 0 Без комментариев
  3. Alexandr Smirnoff 69,970 Баллы репутации Модератор-волонтер
    2023-03-01T07:49:02+00:00

    Здравствуйте, Мария Аристова

    Залейте файл-пример на файлообменник. Попробуем решить проблему:)

    Этот ответ помог вам?

    Комментариев: 0 Без комментариев
  4. Анонимные
    2023-03-01T07:34:32+00:00

    Пробовала поменять код на тот, который предложили вы. Тогда он вообще прекращает работать - перестает автоматически добавлять дату в столбец B. Даже при заполнении таблицы вручную

    Этот ответ помог вам?

    Комментариев: 0 Без комментариев
  5. Анонимные
    2023-02-28T20:48:27+00:00

    Привет Мария

    Меня зовут АннаТомас, и я буду рада помочь вам с вашим вопросом. На этом форуме мы являемся такими же потребителями Майкрософт, как и вы.

    Одним из возможных решений может быть изменение макроса для проверки изменений в любом из столбцов в строке, а не только в столбце 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 Закончить, если Конечная субмарина

    Я надеюсь, что это поможет ;-), дайте мне знать, если это противоречит тому, что вам нужно, я все равно буду полезен, чтобы ответить на больше ваших вопросов.

    Всего хорошего

    АннаТомас

    Отдайте должное сообществу. Помогите следующему человеку с этой проблемой, указав, решил ли этот ответ вашу проблему. Нажмите Да или Нет внизу.

    Этот ответ был автоматически переведен.В результате могут быть грамматические ошибки или некорректные выражения?

    Этот ответ помог вам?

    Комментариев: 0 Без комментариев