Nikem79
Участник

Offline
Сообщений: 41
|
И снова здравствуйте  Добиваю свой многострадальный бланк. На сей раз, руководство сделало замечание, что в бланк будут добавляться данные не только с одного листа, а с разных и данные в столбцах там отличаются. Так вот нужна команда, которая бы заменила содержимое столбцов, допустим столбец C переполз на D, столбец J на N и таких замен предполагается штук 5-6. Потому что в одном листе исходнике ФИО клиента в одной колонке, а в другом листе в другой и так далее. Мой нынешний макрос 1) копирует отмеченные пользователем строки и вставляет их в заранее очищенный лист. 2) Лист Бланк втягивает данные из этого листа формулами ссылками по 1-10 позиций. если будет какой-то другой способ, с удовольствием принимаю варианты. Пока в голову ничего другого не пришло кроме как того что имеется. Каждый раз с нуля создавать новый бланк макросом не хотелось бы - много таблиц, картинок формата и прочего...
|
|
« Последнее редактирование: 25 Июль 2012, 08:09 от Nikem79 »
|
Записан
|
|
|
|
JohnSUN
|
Так вот нужна команда, которая бы заменила содержимое столбцов, допустим столбец C переполз на D, столбец J на N и таких замен предполагается штук 5-6. Потому что в одном листе исходнике ФИО клиента в одной колонке, а в другом листе в другой и так далее. Уточни: "переполз" - это "скопировался" или "переместился"? C и D поменялись местам? Или данные в D стали дублями C? Или данные в D затерты данными из C, а сам C очистился? Мой нынешний макрос 1) копирует отмеченные пользователем строки и вставляет их в заранее очищенный лист.
Круто! Что-то похожее тут уже делали... Кажется, в этой темеесли будет какой-то другой способ, с удовольствием принимаю варианты.
Ну, насчет удовольствия - это ты погорячился. Почему-то все, кому советуют отказаться от Calc'а и попробовать Base для решения похожих задач, огорчаются, обижаются, продолжают бодаться с Calc'ом...
|
|
|
Записан
|
|
|
|
Nikem79
Участник

Offline
Сообщений: 41
|
Думаю поменять местами будет нормально... Хотя не критично, можно и заменой. Вообщем это особой роли не играет, так как из этого листа данные выборочно будут втягиваться в Бланк.
|
|
|
Записан
|
|
|
|
Nikem79
Участник

Offline
Сообщений: 41
|
Пришла некая другая мысль, а есть ли возможность повесить макрос на правую мышку, и после выделения ячеек в зависимости от названия столбца в определённый столбец закидывать содержимое ячеек в "буферный" лист?
Допустим, в исходном документе 5 столбцов под названиями ФИО, Наименование, Кол-во, Цена, Предоплата пользователь выделяет несколько строк, нажимает правую мышку, запускает макрос. Макрос спрашивает, "Добавить данные в существующий лист или очистить перед добавлением?" проверяет есть ли данные в "буферном" листе, если есть и пользователь выбрал "добавить", то добавляет данные выделенной колонки "ФИО" в колонку "ФИО" на новом листе, данные колонки "Наименование" в колонку "Наименование" и так далее.
|
|
|
Записан
|
|
|
|
JohnSUN
|
Действительно, что-то бланк у тебя получается много-много-многострадальный. Можешь его сюда кинуть? Причем выбери самый "грязный" вариант, где нужно много "перестановок" сделать, выбрать данные в разных местах и т.п. И раскрась ячейки, с которыми нужно работать в разные цвета. Это чтобы потом по ходу обсуждения можно было бы говорить "а зеленую область перенести в колонки C-D-E..."
|
|
|
Записан
|
|
|
|
Nikem79
Участник

Offline
Сообщений: 41
|
да, собственно сделал небольшую копию документа чего хотелось бы сделать http://sellmusic.16mb.com/files/DelMe.odsСам оригинал не желательно выкладывать, там личные данные клиентов. Выслал в личку Конечная цель: Пользователь выделаяет позиции из одного, а иногда и из нескольких листов, иногда черезстрочно и они заносятся в бланк. Но обычно позиции не составляют общим объёмом больше 10 шт. всю голову уже сломал, как удобно изъять из нескольких листов 
|
|
« Последнее редактирование: 19 Июль 2012, 13:22 от Nikem79 »
|
Записан
|
|
|
|
Nikem79
Участник

Offline
Сообщений: 41
|
Слишком сложно?.. Есть какая нибудь функция сортировки столбцов из выделенного фрагмента?..
|
|
|
Записан
|
|
|
|
JohnSUN
|
Она не понадобится. Твоя идея насчет согласования данных по заголовкам столбцов совершенно правильная. Потерпи немного (я на работе, всё-таки)
|
|
|
Записан
|
|
|
|
Nikem79
Участник

Offline
Сообщений: 41
|
* Nikem79 набрался терпения)
|
|
|
Записан
|
|
|
|
JohnSUN
|
"И это правильно..." (с) М.С.Горбачёв В общем, как-то так. Вешать вызов макроса на правую кнопку не стал... Как-то не хотелось обычное привычное контекстное меню портить. Вместо этого сделал две кнопки на отдельной панели управления (см. картинку).
Вообще-то, раз уж макросом данные переносятся, то, наверное, можно было бы обойтись без буферного листа - писать прямо в бланк. Но тебе виднее
[вложение удалено Администратором]
|
|
|
Записан
|
|
|
|
Nikem79
Участник

Offline
Сообщений: 41
|
Спасибо огромное, уже вникаю. Переносить на прямую в бланк не удобно тем, что иногда в исходниках полная ерунда, которую нужно исправлять. Если Бланк защищать, то на месте исправлять не представится возможным, таким образом испраления для бланка будут возможны в буферном листе. Может быть конечно есть какая-то возможность вносить данные без защиты бланка, но боюсь будут ломать его постоянно, и всё время нужно будет его восстанавливать. Вообщем как-то так...
|
|
|
Записан
|
|
|
|
JohnSUN
|
Да нет, я чуть про другое писал... Имелось в виду, что набросав заготовок в буферный лист, мы их переносим в бланк. Сейчас ты это делаешь формулами. При этом невозможно играться высотой бланка, количеством строк: сколько их надо будет вывести заранее неизвестно, поэтому будут или лишние пустые до подписи, или когда-нибудь не хватит имеющихся. Лучше бы менеджер просмотрел заготовки в буферном листе, отсортировал их как-то и всё такое, а потом нажал кнопку и запустил отдельный макрос. А уже этот макрос сформировал бы готовый бланк из нескольких шаблонных кусков (шапка, подпись, строки данных), хранящихся где-то на скрытом листе, и данных с буферного листа, а в самом конце защитил бы лист бланка от изменений... Может быть, даже открыл окно предварительного просмотра с этим листом, чтобы только кнопку Печать нажать осталось...
Тот макрос, который я дал, писался на скорую руку. Поэтому он очень далёк от совершенства... Например, при сборе номеров строк нужно бы проверять, а попадает ли выделенная строка в область с данными (не больше ли номер выделенной строки чем getLastUsedRow()). А то ведь, если выделить ВЕСЬ лист, то макрос сейчас и заведомо пустые строки попытается обработать. А их - больше миллиарда! Или, например, при перенесении данных информация о заголовках столбцов сейчас считывается каждый раз. А можно было бы хранить прошлый обработанный номер листа и читать заголовки только если этот номер меняется...
В общем, можно было бы улучшать и улучшать...
|
|
|
Записан
|
|
|
|
Nikem79
Участник

Offline
Сообщений: 41
|
Да уже всё работает отлично, не получилось только вывести в отдельный столбец номера выделенных строк... А это актуально. Есть такая возможность? Куда что дописать?..
|
|
|
Записан
|
|
|
|
JohnSUN
|
Номера? В смысле - первоначальные? Или сквозная нумерация для получившегося набора?
|
|
|
Записан
|
|
|
|
Nikem79
Участник

Offline
Сообщений: 41
|
в первый столбец SName листа номера для каждой строчки в которых была выделена хотя бы одна ячейка ну грубо говоря, каждый номер строчки листа это номер заказа. В буферном листе нужны эти номера заказов чтобы ими манипулировать в бланке
|
|
|
Записан
|
|
|
|
|