Страницы: 1 2 След.
RSS
Как добавлять строки макросом при добавлении строк выше диапазона вручную
 
Господа.

Есть таблица. Юзер должен только заполнять данные в таблице и добавлять строки (по необходимости) макросом. Заголовок таблицы и расчет итогов защищен

1) Написал простейший макрос добавления строк
2) Чтобы сохранить стиль оформления, формата выпадающего списка, ничего не смог придумать, как прописать копирования с аналогичной таблицы и вставку в целевую таблицу
3) Чтобы итоговая сумма считалась при добавлении строк, прописал сумму через ДВССЫЛ

Теперь столкнулся с проблемой. Выше этой таблицы есть области где юзер может добавить строки сам, вручную. Если он там добавляет, то у меня смещается диапазон вставки (так как он прописан конкретно в макросе), а также нарушается и итоговое суммирование (начальная ячейка прописана в ДВССЫЛ).

Как быть? Эту таблицу можете посмотреть в примере.

Буду благодарен за помощь
 
Пускай вставляет. Какие проблемы?
=СУММ(ДВССЫЛ("Y6:Y"&СТРОКА()-2))
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир,Спасибо за подсказку по сумме. Что будет если сверху добавить сверху таблицы строку?

1) Вставка будет осуществляться в 6 строку, которая уже сместиться на заголовок таблицы
2) Y6 который вы прописали в ДВССЫЛ будет уже ячейка заголовка таблицы...

Понимаете?
 
Тогда нужно через ПОИСКПОЗ привязаться к слову "рыночная".
=СУММ(ДВССЫЛ("Y" & ПОИСКПОЗ("рыночная";Y1:Y100;0)+1&":Y"&СТРОКА()-2))
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Аналог вашего макроса!
Код
Sub Vstavka()
Rows("6:6").Insert Shift:=xlDown
Range("b7:an6").FillUp
Range("b6:an7").ClearContents
End Sub
Изменено: Nordheim - 16.08.2017 11:21:40
"Все гениальное просто, а все простое гениально!!!"
 
Владимир,принято. Благодарю. Попробую. Только у меня строк надо ставить 5000 и главное чтобы никто больше не прописал слово рыночная в этом дипазоне :)

Скажите, а по вставке строк макросом нет идей? )
 
Цитата
brunokaz написал:
..макросом нет идей
Тут нужны Ваши пояснения, что хотите получить на выходе? Копировать нужно с листа 2 одну строку или то, что заполнено и т.д. в этом духе.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Nordheim,
Ваш код макроса:
1) Удаляет уже заполненные строки (если я заполнил и понял, что мне еще нужна строка)
2) Вставляет по несколько строк, при добавлении множества строк
3) в случае добавления строк выше таблицы, начнется чорти чо. Проблема не решается получается
Изменено: brunokaz - 16.08.2017 11:49:44
 
Владимир, тогда по примеру с адресами пройдусь:

1) Я заполнил таблицу, все данные в ней, и понял, что у меня есть еще 1 объект, данные по которому необходимо внести в эту таблицу. Я нажимаю кнопку - строка добавляется выше сроки заполненной мною ранее (становится первой в этой таблице). При этом, сохраняются форматирования, оформление и выпадающий список новой добавленной строки.я заполняю данные по второму объекту.
2) В процессе работы, я добавляю несколько строк выше таблицы. и вспоминаю, что мне нужно внести данные по третьему объекту. Тут то и возникает проблема с моим макросом: в нем прописаны конкретные диапазоны: вставок номера строк и пр...Но нумерация строк таблицы сместится же на количество добавленных выше таблицы строк. Вот этого и надо избежать, как бы привязать макрос строго к этой таблице, вне зависимости от добавленных/удаленных строк выше самой таблицы.

Как-то так. Эта таблица большого заключения, под которой и над которой будет вестись работа по заполнению данных...
Изменено: brunokaz - 16.08.2017 11:51:17
 
Файл без данных поэтому не отследил, ничего заполненного не должен удалять.
Код
Sub Vstavka()
Rows("6:6").Insert Shift:=xlDown
Range("b7:an6").FillUp
Range("b6:an6").ClearContents
End 

Subbrunokaz написал: 2) Вставляет по несколько строк

всегда вставляет только 1 строку

brunokaz написал: 3) в случае добавления строк выше таблицы, начнется чорти чо. Проблема не решается получается

Как может макрос вставит строку выше таблицы? Вы планируете смещать таблицу?

Изменено: Nordheim - 16.08.2017 11:51:30
"Все гениальное просто, а все простое гениально!!!"
 
А почему Вы не хотите просто защитить первые три строки от вставки строк, редактирования?
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Nordheim, Мы привязаны к строке 6. Если я добавлю строку выше таблицы, это же станет строкой заголовка и начнуться проблемы
Код
Rows("6:6").Insert Shift:=xlDown 
Изменено: brunokaz - 16.08.2017 11:55:25
 
Я не пойму как вы добавите строку выше таблицы, в коде зашита вставка в 6 строку, и дальнейшее форматирование конкретно 6 сроки.
Код
Sub Vstavka()
' втавляем пустую строку в строку №6
Rows("6:6").Insert Shift:=xlDown
' Копируем данные и формат с 7 строки
Range("b7:an6").FillUp
' очищаем 6 строку
Range("b6:an6").ClearContents
End
Вроде код примитивный до невозможности и все понятно.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
brunokaz написал:
Если я добавлю строку выше таблицы
Каким образом?
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, в моем примере выделите строку два и вручную добавьте строку, а потом добавьте строку в таблицу при помощи написанного Вами макроса.

Получится так, что строка 6 (Rows("6:6").Insert Shift:=xlDown) это уже строка заголовка таблицы .....

Код простой, может я не верно объясняю, за что и извиняюсь, если это так.
Изменено: brunokaz - 16.08.2017 12:18:40
 
Цитата
Nordheim написал:
brunokaz написал: 3) в случае добавления строк выше таблицы, начнется чорти чо. Проблема не решается получаетсяКак может макрос вставит строку выше таблицы? Вы планируете смещать таблицу?
Я и спросил разве таблица будет смещаться?
Мой макрос повторяет с точностью ваш, разница в том , что не нужно ничего ниоткуда копировать вот собственно и все.
Цитата
brunokaz написал:
Nordheim , в моем примере выделите строку два и вручную добавьте строку, а потом добавьте строку в таблицу при помощи написанного Вами макроса.
проделайте манипуляции с вашим макросом результат идентичный будет.
Я одного не пойму зачем пользователь вставит строки вручную если на листе кнопка вставки строк присутствует?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
Я и спросил разве таблица будет смещаться?
Не понял фразу сначала по смещению....
Цитата
Nordheim написал:
Мой макрос повторяет с точностью ваш, разница в том , что не нужно ничего ниоткуда копировать вот собственно и все.
Согласен
Цитата
Nordheim написал:
Я одного не пойму зачем пользователь вставит строки вручную если на листе кнопка вставки строк присутствует?
Этот лист состоит из десятков таблиц. Таблицы и их форму изменять нельзя - это утвержденная форма заключения, но в некоторых местах строки добавлять можно (например под таблицами), с целью отражения комментариев к изложенным в таблицах данным и изложением доп инфы по данным из таблицы.
Изменено: brunokaz - 16.08.2017 12:40:19
 
Попробуйте добавить строки выше табличной формы..
Изменено: Владимир - 16.08.2017 13:54:52
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Цитата
Владимир написал:
Попробуйте добавить строки выше табличной формы..
Лист защищен....
 
Если эту проблему не решить или трудно решаема, прошу подтвердить кто может. Тогда я буду думать что делать...
 
Код
Sub Vstavka()
ActiveSheet.Unprotect "12345"
Rows(6).Insert
Rows("7:6").FillUp
Rows(6).ClearContents
ActiveSheet.Protect "12345", DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowInsertingColumns:=True, _
        AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
        AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
        AllowUsingPivotTables:=True
End Sub
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, к сожалению это не решает вопрос с возможным смещением таблицы. Если только весь лист не защищать по вставке строк, что я не могу сделать
Изменено: brunokaz - 17.08.2017 09:16:32
 
Цитата
brunokaz написал:
к сожалению это не решает вопрос с возможным смещением таблицы
Почему же?, Строки вставляются благополучно макросом. Пользователь вставить строки не может. как в таком случае сместится таблица?
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, ладно...придется запрещать пользователям вставлять строки. Спасибо Вам за помощь
 
Попробуйте сделать обходной вариант. Вставление строк в любое место кроме шапки таблицы, с использованием InputBox.
"Все гениальное просто, а все простое гениально!!!"
 
Так и пробую уже
 
Подскажите, а что нужно поменять в макросе, что бы он добавлял новую строку не в начало таблицы, а в конец?
Изменено: Kcuxa_xa - 07.01.2019 22:26:50
 
Kcuxa_xa, А в чем смысл? Вам нужно вставить пустую строку перед последней заполненной в таблице?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
А в чем смысл?
да Вы правы это в принципе не критично. А не подскажите как в таком случае сделать, что бы новая строка автоматом нумеровалась по порядку?
 
Файл пример покажите.
Можно так
Код
Sub test()
    Dim lrow&
    lrow = Range("a" & Rows.Count).End(xlUp).Row
    If lrow = 1 Then Exit Sub
    Range("a" & lrow + 1).Value = Range("a" & lrow).Value + 1
End Sub
Изменено: Nordheim - 07.01.2019 23:34:39
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1 2 След.
Читают тему
Наверх