Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как обеспечить работу макроса при заполнении формы? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как обеспечить работу макроса при заполнении формы?
marusa122 Дата: Вторник, 28.02.2023, 19:20 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Здравствуйте!
Есть "умная таблица" в Экселе с заголовками и макросами.
Столбец А - "№ п/п". Заполняется автоматически формулой =СТРОКА()-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 в форме вообще не предусматривает ручного ввода. Как сделать так, чтобы вышеприведенный макрос работал и при заполнении таблицы с помощью формы?
К сообщению приложен файл: 9376207.xlsm (177.4 Kb)
 
Ответить
СообщениеЗдравствуйте!
Есть "умная таблица" в Экселе с заголовками и макросами.
Столбец А - "№ п/п". Заполняется автоматически формулой =СТРОКА()-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
Дата добавления - 28.02.2023 в 19:20
MikeVol Дата: Среда, 01.03.2023, 01:13 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 81 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
marusa122, Доброго времени суток. Как вариант:
[vba]
Код

Option Explicit

' -----------------------------------------------------------

' ============================================================
[/vba]

Но важно чтоб Выборка по дате в Сводной Таблице была в "All" при внесение данных через форму. Так произойдет обновление Сводной Таблицы и сработает макрос Ws_Calc что в свою очередь вставит дату в столбец "B" умной таблицы. Как вы и просили.
Удачи!


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Среда, 01.03.2023, 06:33
 
Ответить
Сообщениеmarusa122, Доброго времени суток. Как вариант:
[vba]
Код

Option Explicit

' -----------------------------------------------------------

' ============================================================
[/vba]

Но важно чтоб Выборка по дате в Сводной Таблице была в "All" при внесение данных через форму. Так произойдет обновление Сводной Таблицы и сработает макрос Ws_Calc что в свою очередь вставит дату в столбец "B" умной таблицы. Как вы и просили.
Удачи!

Автор - MikeVol
Дата добавления - 01.03.2023 в 01:13
marusa122 Дата: Среда, 01.03.2023, 02:46 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

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
Дата добавления - 01.03.2023 в 02:46
MikeVol Дата: Среда, 01.03.2023, 06:31 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 81 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Сводные таблицы форма вообще не должна затрагивать

А кто вам сказал что код что я вам дал вносит данные в сводную таблицу? Ладно, не надо так не надо вам ввод даты без
макрос это пишет при ручном заполнении ячеек, но надо бы, чтобы он участвовал
. Дело ваше пишите дальше руками.

Макрос работал так: вы через форму вносили данные в умную таблицу, форма закрывалась. И срабатывал макрос на автоматическую вставку даты в той строке где вы только что внесли данные. Вам же этого не надо было.

Вопрос: Тут уже стали помогать с написанием кода через личные сообщения?


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Среда, 01.03.2023, 07:11
 
Ответить
Сообщение
Сводные таблицы форма вообще не должна затрагивать

А кто вам сказал что код что я вам дал вносит данные в сводную таблицу? Ладно, не надо так не надо вам ввод даты без
макрос это пишет при ручном заполнении ячеек, но надо бы, чтобы он участвовал
. Дело ваше пишите дальше руками.

Макрос работал так: вы через форму вносили данные в умную таблицу, форма закрывалась. И срабатывал макрос на автоматическую вставку даты в той строке где вы только что внесли данные. Вам же этого не надо было.

Вопрос: Тут уже стали помогать с написанием кода через личные сообщения?

Автор - MikeVol
Дата добавления - 01.03.2023 в 06:31
marusa122 Дата: Среда, 01.03.2023, 09:37 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

MikeVol, Мне помогали не через личные сообщения, а в другом топике на форуме
Просто очень смутило в начале кода ""Сводная таблица3 As Target" (или как-то так, сейчас уже точно не скажу - вы же удалили код почему-то...)
 
Ответить
СообщениеMikeVol, Мне помогали не через личные сообщения, а в другом топике на форуме
Просто очень смутило в начале кода ""Сводная таблица3 As Target" (или как-то так, сейчас уже точно не скажу - вы же удалили код почему-то...)

Автор - marusa122
Дата добавления - 01.03.2023 в 09:37
Pelena Дата: Среда, 01.03.2023, 09:48 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
Тут уже стали помогать с написанием кода через личные сообщения?

этот код отсюда


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Тут уже стали помогать с написанием кода через личные сообщения?

этот код отсюда

Автор - Pelena
Дата добавления - 01.03.2023 в 09:48
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!