Страницы: 1
RSS
Как избежать смещения таблицы при добавлении строк макросом?
 
Добрый всем вечер!
Есть три таблицы на одном листе. В каждую есть необходимость добавлять строки. Записал макрорекодером. Если идти снизу вверх (от Таблицы 3 к Таблице 1), то никаких проблем - строки копируются и добавляются. Но если, например, добавить несколько строк в Таблицу 1, то при выполнении макроса к таблице 2, строки добавляются уже со смещением (не в Таблице 2, а выше). Понимаю, почему это происходит, но не знаю, как это обойти.
 
Цитата
ДмСмирнов написал:
Понимаю, почему это происходит, но не знаю, как это обойти
понимаете? отлично
посчитайте новые адреса и обращайтесь к таблице 2 по изменившимся адресам
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, так ведь с добавлением каждой новой строки адреса будут меняться?
Если, конечно, я под адресом правильно понимаю номер строки.  
 
совершенно верно. адрес для строки - это ее номер
и если к какой-то строке Вы обращались  Rows(X), то после того как перед нею добавили N строк, обращайтесь к ней Rows(X + N)
Изменено: Ігор Гончаренко - 10.12.2018 19:34:24
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
а как мне его посчитать? ведь добавлений строк может быть сколь угодно много.
может быть нужно "привязаться" к шапке таблицы?
 
Цитата
ДмСмирнов написал:
Понимаю, почему это происходит
это следует понимать, что Вы не понимаете, как это происходит и не контролируете процесс добавления строк?
Изменено: Ігор Гончаренко - 10.12.2018 19:40:28
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, понимать понимаю, но не контролирую :))))
Другими словами, все мое понимание в том, что макрос добавляет строку именно в том месте, где я ему указал.
Дальше этого мое понимание не простирается :) Потому и записал макрорекодером - знаний не хватает
Изменено: ДмСмирнов - 10.12.2018 19:46:10
 
Цитата
ДмСмирнов написал:
В каждую <таблицу> есть необходимость добавлять строки
А количество этих добавляемых строк не Вы определяете?
 
Юрий М, нет, я добавляю по одной строке -- больше нет необходимости
 
Цитата
Ігор Гончаренко написал:
и если к какой-то строке Вы обращались  Rows(X), то после того как перед нею добавили N строк, обращайтесь к ней Rows(X + N)
тут мне совсем не понятно: как мне отследить сколько строк было добавлено? как определить N?
 
никому еще не удавалось записать мысли макрорекордером, но в Microsoft сейчас работает над этим, скоро макросы можно будет надиктовывать макрорекордуру, причем надиктовывать мысленно
а пока...
нужно коротко, но точно описывать свою задачу словами. эти слова обязательно прочтут, возможно, кто-то поймет и выдаст код для решения задачи, как макрорекордер.
Изменено: Ігор Гончаренко - 10.12.2018 19:55:32
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Если
Цитата
ДмСмирнов написал:
я добавляю по одной строке
То N=1
 
Цитата
ДмСмирнов написал:
я добавляю по одной строке -- больше нет необходимости
Цитата
ДмСмирнов написал:
как определить N
так уже определено N = 1, добавляйте к Х 1 каждый раз как добавляете строку, если № добавляемой строки меньше Х
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
никому еще не удавалось записать мысли макрорекордером
жаль, конечно. в противном случае я бы, вероятнее всего, без знания VBA смог бы справиться
а пока помощи прошу
 
Цитата
ДмСмирнов написал: ведь добавлений строк может быть сколь угодно много.
Цитата
ДмСмирнов написал: я добавляю по одной строке -- больше нет необходимости
OFF Нет стабильности в этом мире... ;) Или нет созревшей ЦЕЛИ/ИДЕИ? а соответственно и решения - что, для чего, как.
Уточните, пожалуйста, вам надо добавить строки пустые, чтобы в них затем что-то вставить? Или сразу добавляете/вставляете записи с данными из постоянных источников?
Изменено: Z - 10.12.2018 20:03:40
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Z, кнопка добавляет по одной строке, таких добавлений может быть сколь угодно много.
Строки добавляю пустые, внизу таблицы. Но для того, чтобы сохранить форматы делаю это копированием.
Изменено: ДмСмирнов - 10.12.2018 20:09:57
 
ДмСмирнов, здравствуйте!  Похоже, Вы не понимаете самого принципа добавления строк
Цитата
ДмСмирнов написал:
Строки добавляю пустые, внизу таблицы
Зачем? Полтора миллиона пустых строк на листе недостаточно? Как вариант - отталкиваться от объединенных ячеек в заголовках Ваших таблиц, но ...  далеко не айс...Вы записали рекордером процесс, но у процесса должна быть логика. По каким условиям вставлять строки? Что в эти строки вставлять? Ниже какой-то строки? Или вставлять именно пустые? В примере - чистые таблицы, т.е. пустые строки и ячейки. Попробуйте Count и Find, либо конкретней опишите Вашу задачу (именно: условия,а не пустые строки в примере)
Цитата
Z написал:
Уточните, пожалуйста, вам надо добавить строки пустые, чтобы в них затем что-то вставить? Или сразу добавляете/вставляете записи с данными из постоянных источников?
Цитата
Ігор Гончаренко написал:
нужно коротко, но точно описывать свою задачу словами. эти слова обязательно прочтут, возможно, кто-то поймет и выдаст код для решения задачи, как макрорекордер.

P.S. Не увидел:
Цитата
для того, чтобы сохранить форматы
А значения как в таблицы попадают? Если Вам важен результат опишите как и откуда появляются данные в этих таблицах  и покажите в файле-примере варианты желаемого результата (пустая строка - это вообще ни о чем), а не способы (в Вашем случае - вставка пустой строки с форматированием) , которыми Вы хотите результата достичь. Если интересуют способы - то только читать матчасть, изучать, иначе никак. Либо создайте отдельную тему: "Как создать пустую строку с ф определенным форматированием"  или что-то типа этого
Изменено: _Igor_61 - 10.12.2018 21:07:52
 
_Igor_61, здравствуйте.
есть некоторое количество таблиц, которые заполняет пользователь. Например, в таблице 1 вводятся родственники: отец, мать, брат, сват и т.д. Изначально в таблице одна строка. После ее заполнения пользователь добавляет вторую и зполняет ее, затем еще одну. После того, как родственники закончились :) переходит к таблице 2 - например, опыт работы. Там тоже изначально одна строка. Заполнил первую, добавляет вторую и т.д. Далее таблица 3 и т.д.
конечно, он может вернуться к предыдущей таблице и добавить еще сведения.
ну вот как то так. Не очень кратко, но, хотелось бы верить, что понятно :)
 
ДмСмирнов, в примере нет никаких (можно отвлечённых) данных, кроме заголовков таблиц. А для решения необходимо будет найти последнюю заполненную строку в третьей таблице. У Вас там есть какие-нибудь данные?
 
ЮрийМ, изначально все таблицы с одной пустой строкой и шапкой. После ее заполнения ползователь может добавить еще одну, если есть необходимость. Но у него могут быть данные только на одну строку в таблице. А может быть такое, что и вовсе не будет заполнять и перейдет к следующей таблице
Изменено: ДмСмирнов - 10.12.2018 21:47:14
 
См. вариант. Для упрощения убрал объединённые ячейки в заголовках таблиц. Центровку можно сделать другим способом.
Но в третьей таблице в области данных столбца А нужно иметь хоть какой-нибудь символ. Иначе придётся пересматривать подход.
 
И ещё один момент: есть привязка к названию (заголовкам) таблиц.
 
Даёте изначально имена первым ячейкам (или первым строкам) в каждой таблице. Макрос учите использовать эти имена.
 
Имена - хорошая идея! )
 
Цитата
ДмСмирнов написал:
Далее таблица 3 и т.д.
О чем и  спрашивалось выше. И сколько таких таблиц может быть? И во всех ли таблицах будет форматирование, как в первой?
Цитата
Z написал:
нет созревшей ЦЕЛИ/ИДЕИ?
Похоже, нет. ТС-у как вариант можно предложить это, но если он всего лишь хочет все делать именно вставкой строк с определенным форматированием... И по мере возникновения потребностей создавать новую таблицу на этом же листе... А потом возникнет потребность в фильтре... в поиске по каким-то признакам...
Цитата
ДмСмирнов написал:: хотелось бы верить, что понятно
Дмитрий, понятно. Продумайте хорошенько (исходя не из сиюминутной задачи) - что в дальнейшем из этих таблиц нужно будет вытягивать? Тогда и про структуру можно будет подумать. Сейчас Вы хотите, что бы Вам подсказали способ заполнения придуманной Вами структуры, но даже на первый взгляд в дальнейшем с ней могут возникнуть проблемы. Поэтому Вам и задают вопросы, а Вы отвечаете не на все, и настаиваете на своей вставке строк. Поверьте, Эти вопросы не придирки, а именно для того, чтобы Вам помочь. Если количество таблиц конечное, тогда покажите, сколько их (3 или 30?) Т.е. обозначьте задачу, а не способы, которыми Вы эту задачу пытаетесь решить.  
 
Юрий М, спасибо огромное!!!
"подпилил" под свои наименования таблиц -- все работает!!!
Разобрался, как изменить количество копируемых столбцов (или ячеек в данном случае).
Но вот так и не понял, как изменить код, если нужно не одну строку добавить, а три. Причем часть ячеек объединенные, как в прилагаемом примере.
 
А кто же Вам мешал сразу (СРАЗУ!) показать реальную структуру таблиц?
И ведь в Правилах специально на этом сделан акцент (см. пункт 2.3).
 
Так ведь хочется не просто заполучить готовое решение, а еще и попытаться разобраться в нем, адаптировав под какие-то особенности.
 
Добрый день!
М.б. кто-то уже это предложил. Нет времени всё читать.

Есть еще такой вариант.

Дайте собственные имена ячейкам, в которых у вас записано "Таблица...".
Тогда Ваш первоначальный макрос будет выглядеть почти без изменений.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
ДмСмирнов написал:
может быть нужно "привязаться" к шапке таблицы?
Именно! :)
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
Страницы: 1
Наверх