Здравствуйте! Есть "умная таблица" в Экселе с заголовками и макросами. Столбец А - "№ п/п". Заполняется автоматически формулой =СТРОКА()-1 при добавлении новой строки. Столбец B - "Дата". Дата оформления заказа. Заполняется автоматически с помощью макроса, когда в соседней ячейке в столбце C появляется хоть какой-то текст. Формат ДД.ММ.ГГГГ Столбец С - "Номер заказа". Пишется вручную. Столбец D - "Сумма". Пишется вручную. Столбец E - "Доп. продажи". Пишется вручную. В зависимости от того, была доп.продажа или нет, в ячейку ставится или сумма доп.продажи, или она остается пустой. Столбец F - "Клиент". Пишется вручную. Столбец B заполняется с помощью следующего макроса, как только в соседнюю ячейку в столбце C вносятся данные (номер заказа):
[vba]
Код
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
[/vba]
Проблема: когда я пытаюсь заполнять таблицу с помощью простой формы (вызываемой с помощью кнопки на Панели быстрого доступа), дата в форме должна писаться вручную. Если ее пропустить, при сохранении записи в строке таблицы на месте даты остается пустая ячейка. Чтобы там появилась дата, надо отредактировать вручную ячейку C ("Номер заказа"). При этом столбец A в форме вообще не предусматривает ручного ввода. Как сделать так, чтобы вышеприведенный макрос работал и при заполнении таблицы с помощью формы?
Здравствуйте! Есть "умная таблица" в Экселе с заголовками и макросами. Столбец А - "№ п/п". Заполняется автоматически формулой =СТРОКА()-1 при добавлении новой строки. Столбец B - "Дата". Дата оформления заказа. Заполняется автоматически с помощью макроса, когда в соседней ячейке в столбце C появляется хоть какой-то текст. Формат ДД.ММ.ГГГГ Столбец С - "Номер заказа". Пишется вручную. Столбец D - "Сумма". Пишется вручную. Столбец E - "Доп. продажи". Пишется вручную. В зависимости от того, была доп.продажа или нет, в ячейку ставится или сумма доп.продажи, или она остается пустой. Столбец F - "Клиент". Пишется вручную. Столбец B заполняется с помощью следующего макроса, как только в соседнюю ячейку в столбце C вносятся данные (номер заказа):
[vba]
Код
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
[/vba]
Проблема: когда я пытаюсь заполнять таблицу с помощью простой формы (вызываемой с помощью кнопки на Панели быстрого доступа), дата в форме должна писаться вручную. Если ее пропустить, при сохранении записи в строке таблицы на месте даты остается пустая ячейка. Чтобы там появилась дата, надо отредактировать вручную ячейку C ("Номер заказа"). При этом столбец A в форме вообще не предусматривает ручного ввода. Как сделать так, чтобы вышеприведенный макрос работал и при заполнении таблицы с помощью формы?marusa122
Но важно чтоб Выборка по дате в Сводной Таблице была в "All" при внесение данных через форму. Так произойдет обновление Сводной Таблицы и сработает макрос Ws_Calc что в свою очередь вставит дату в столбец "B" умной таблицы. Как вы и просили. Удачи!
marusa122, Доброго времени суток. Как вариант: [vba]
Но важно чтоб Выборка по дате в Сводной Таблице была в "All" при внесение данных через форму. Так произойдет обновление Сводной Таблицы и сработает макрос Ws_Calc что в свою очередь вставит дату в столбец "B" умной таблицы. Как вы и просили. Удачи!MikeVol
Ученик. Одесса - Украина
Сообщение отредактировал MikeVol - Среда, 01.03.2023, 06:33
MikeVol, В той таблице, которая стоит на листе рядом с основной, дата в фильтре зафиксирована и обновляется только в том случае, если в основной таблице появится более свежая дата. Мне здесь же подсказали макрос для этого:
[vba]
Код
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) Dim oTbl As ListObject, maxdate As Date Set oTbl = ActiveSheet.ListObjects("Таблица1") maxdate = Application.Max(oTbl.ListColumns("Дата").Range) Application.EnableEvents = False Target.PivotFields("[Таблица1].[Дата].[Дата]").ClearAllFilters Target.PivotFields("[Таблица1].[Дата].[Дата]").CurrentPageName = "[Таблица1].[Дата].&[" & Format(maxdate, "YYYY-MM-DD") & "T00:00:00]" Application.EnableEvents = True End Sub
[/vba]
И он работает на одном листе с макросом, который я привела в шапке этой темы. Данные с помощью формы должны вноситься именно в основную таблицу, а не в сводную. Сводная таблица обновляется сама ежеминутно. Т.е. нужно, чтобы форма сама вносила № п/п (это она и так делает) и дату заполнения (макрос это пишет при ручном заполнении ячеек, но надо бы, чтобы он участвовал еще и в заполнении ячеек через форму). Чтобы в форму оставалось ввести суммы и имя клиента. Сводные таблицы форма вообще не должна затрагивать - те сами потом возьмут из основной таблицы все, что им потребуется.
MikeVol, В той таблице, которая стоит на листе рядом с основной, дата в фильтре зафиксирована и обновляется только в том случае, если в основной таблице появится более свежая дата. Мне здесь же подсказали макрос для этого:
[vba]
Код
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) Dim oTbl As ListObject, maxdate As Date Set oTbl = ActiveSheet.ListObjects("Таблица1") maxdate = Application.Max(oTbl.ListColumns("Дата").Range) Application.EnableEvents = False Target.PivotFields("[Таблица1].[Дата].[Дата]").ClearAllFilters Target.PivotFields("[Таблица1].[Дата].[Дата]").CurrentPageName = "[Таблица1].[Дата].&[" & Format(maxdate, "YYYY-MM-DD") & "T00:00:00]" Application.EnableEvents = True End Sub
[/vba]
И он работает на одном листе с макросом, который я привела в шапке этой темы. Данные с помощью формы должны вноситься именно в основную таблицу, а не в сводную. Сводная таблица обновляется сама ежеминутно. Т.е. нужно, чтобы форма сама вносила № п/п (это она и так делает) и дату заполнения (макрос это пишет при ручном заполнении ячеек, но надо бы, чтобы он участвовал еще и в заполнении ячеек через форму). Чтобы в форму оставалось ввести суммы и имя клиента. Сводные таблицы форма вообще не должна затрагивать - те сами потом возьмут из основной таблицы все, что им потребуется.marusa122
макрос это пишет при ручном заполнении ячеек, но надо бы, чтобы он участвовал
. Дело ваше пишите дальше руками.
Макрос работал так: вы через форму вносили данные в умную таблицу, форма закрывалась. И срабатывал макрос на автоматическую вставку даты в той строке где вы только что внесли данные. Вам же этого не надо было.
Вопрос: Тут уже стали помогать с написанием кода через личные сообщения?
макрос это пишет при ручном заполнении ячеек, но надо бы, чтобы он участвовал
. Дело ваше пишите дальше руками.
Макрос работал так: вы через форму вносили данные в умную таблицу, форма закрывалась. И срабатывал макрос на автоматическую вставку даты в той строке где вы только что внесли данные. Вам же этого не надо было.
Вопрос: Тут уже стали помогать с написанием кода через личные сообщения?MikeVol
Ученик. Одесса - Украина
Сообщение отредактировал MikeVol - Среда, 01.03.2023, 07:11
MikeVol, Мне помогали не через личные сообщения, а в другом топике на форуме Просто очень смутило в начале кода ""Сводная таблица3 As Target" (или как-то так, сейчас уже точно не скажу - вы же удалили код почему-то...)
MikeVol, Мне помогали не через личные сообщения, а в другом топике на форуме Просто очень смутило в начале кода ""Сводная таблица3 As Target" (или как-то так, сейчас уже точно не скажу - вы же удалили код почему-то...)marusa122