|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Здравствуйте уважаемые и продвинутые в VBA товарищи! До сих пор с удовольствием пользовался ресурсами форума как сторонний наблюдатель - без регистрации, так сказать. Но вот наступил момент, когда найти ответ на свой вопрос не могу, а решать задачу необходимо. Пожалуйста, подскажите как написать код макроса, который копировал бы определённый диапазон ячеек в одном листе и вставлял скопированные значения в другой лист. При вставке необходимо вставлять только значения (использую Selection.PasteSpecial Paste:=xlPasteValues) и, что оказалось неподъемным - ТОЛЬКО ЦВЕТ ЯЧЕЕК! Paste:=xlPasteFormats для меня не подходит, т.к. вставляются все форматы, включая условное форматирование, шрифт и прочее. А нужно - только цвет ячеек! Где-то читал об использовании циклов, но этот вариант также не очень желателен, т.к. диапазонов много (40-50) и значений в каждом диапазоне может быть от 20 до 500 строк. Очень надеюсь, что есть решение данной проблемы. Не проходите мимо!!! P.S. Оцениваю свой уровень знания VBA как начинающий, поэтому прошу по возможности комментировать строки кода, чтобы я мог понять их смысл. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2018, 06:20 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
ВладимирГКнужно - только цвет ячеек! Где-то читал об использовании циклов, но этот вариант также не очень желателен, т.к. диапазонов много (40-50) и значений в каждом диапазоне может быть от 20 до 500 строк.Это - вариант, причём единственный. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2018, 07:52 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Примитивно решаем вопрос "в лоб": Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2018, 11:55 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Ура, работает!!!! Огромное спасибо за оперативность! То, что нужно! Адаптирую в свой код и оценю скорость. Спасибо Aster32! Здорово, что есть такой сайт и люди! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2018, 14:34 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Aster32, 1. зачем Value-то по одной ячейке переносить, Value образует массив! 2. Если исходная ячейка не имела окраски, результирующая получается белой, что не совсем правильно. Надо проверять Код: vbnet 1.
Akina, я не согласен, что это единственный вариант. Можно создать стиль, который "обнулит" все, кроме цвета ячейки, и применить его после вставки значений и форматов: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2018, 17:23 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Здравствуйте, Казанский! Попытался запустить Ваш макрос - не получается! Копирует значения и условное форматирование. Цвет не копирует. Что я делаю не так? Вот кусок макроса с моими адресами листов и ячеек. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 07:57 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
КазанскийAster32, 2. Если исходная ячейка не имела окраски, результирующая получается белой, что не совсем правильно. Надо проверять Код: vbnet 1.
Да, Вы правы, окрашивает в белый цвет и это не корректно. Но у меня не получается вставить в код, предложенный Aster32, Вашу проверку. Подскажите, пожалуйста, куда и как это нужно сделать. Спасибо за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 08:29 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Проверка при записи массива цветов, и проверка при "воспроизведении" на новом листе: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 14:16 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
ВладимирГК, приложите пример файла, попробую допилить этот метод. А пока вариант с поячеечным переносом цвета Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 19:24 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Друзья, спасибо за столь активную помощь, даже не ожидал!!!!! Aster32, так как вариант товарища Казанского у меня пока не рабочий, то я сконцентрировался на Вашем. Учёл проверку на цвет, всё работает! И это уже очень здорово, т.к. не руками, а таки автоматически делается. Но когда запустил в цикл отработку всех необходимых для копирования диапазонов, а их сейчас, когда база неполная - 29 столбцов по 211 строк, - получаю выгрузку больше получаса! А ожидается - около 500 строк в 29 столбцах!!! Да, выгрузка будет нужна не каждый день. Может быть - несколько раз в месяц. Но такое время выполнения - это настораживает! А ведь потом ещё в другое место закачивать! Очень хочется быстрее! Уважаемый Казанский, также искренне благодарю за участие в решении моей задачи. Завтра попробую Ваш доработанный вариант адаптировать и запустить. Посмотрю по работоспособности и скорости. Честно говоря, сходу не понял - у меня глубокая ночь, видимо торможу уже. Что касается файла, постараюсь откусить работоспособный кусок из проекта и обязательно Вам направлю. Ещё раз всем большое спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 22:11 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Уважаемые товарищи, я был неточен! Время работы выгрузки оценил приблизительно, т.к. не дожидался конца выполнения процедуры. Сегодня с утра набрался терпения и дождался конца. Один час и четыре минуты!!! Основная доля - 99% времени - это отработка моих 29 столбцов. Остальные диапазоны (а их - пару десятков) копируются без цвета, а поэтому - быстро (копировать-вставить диапазон). Проблема!!! Как быть? К коду ув. Казанского пока не приступал, может там спасение... Но сейчас - намазал лыжи - поеду свежего воздуха глотну часок-другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 07:18 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Уважаемый Казанский! Я на свежую голову довольно быстро (как я полагаю для моего начального уровня) разобрался с последним Вашим предложением. Это невероятно!!!! Всё просто летает!!! Низкий Вам поклон! Сейчас займусь адаптацией для всех 29-ти диапазонов и отрапортую по итоговому времени выполнения! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:47 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Set d = Sheets("ÁÄ").Range("V30").Resize(.count) Set d = Sheets("ÁÄ").Range(Cells(ÑòðîêàÇàãîëîâêîâ + 1, diap)).Resize(.count) Подскажите, в чем ошибка во второй строке. Я себе представляю, что это одно и то же. Но первая строка рабочая, а на вторую выдаётся ошибка Applucation-defined or object defined error. При этом переменные существуют. "СтрокаЗаголовков" = 29, "diap" = 22. Т.е. адрес ячейки "V30", как в первой строке. Неправильно через Cells переписал? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 12:45 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2.
Вот, кажется научился вставлять, прошу прощения за неграмотность. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 12:52 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
ВладимирГК, Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 12:54 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Код: vbnet 1.
Всё, разобрался!!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 12:56 |
|
VBA копирование диапазона: только значение и цвет (исключая всякое иное форматирование)
|
|||
---|---|---|---|
#18+
Фанфарыыы!!!!! Всё работает отлично! Перевёл на данный способ копирование и других диапазонов, где нужны были только значения (без переноса цвета). Время выполнения ВСЕГО - 1 минута 31 секунда!!! Уважаемый Казанский, я снимаю шляпу! Ещё раз огромное спасибо неравнодушным Akina и Aster32 - Вы меня многому научили! Задача решена! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 14:01 |
|
|
start [/forum/topic.php?fid=60&fpage=12&tid=2155133]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
637ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 736ms |
0 / 0 |