Страницы: 1
RSS
Искажение цветов ячеек при копировании в другую книгу
 
Приветствую всех!  
 
Столкнулся с неожиданной проблемой и понял, что без Вашей помощи мне не справиться...  
 
Суть в следующем - есть некий отчет, который экспортирован в Excel из MS Reporting Services (не знаю, насколько это принципиально - для справки). Отчет имеет строгий вид, и определенную раскраску (текст, цвет ячеек и т.д.) Допустим, мне надо скопировать этот отчет в другую книгу - либо таблцу, либо лист целеком - и вот тут начинаются чудесные превращения: цвета становятся кислотными, даже близко не напоминающими исходные... в общем мрак! Однако, если эту новую таблицу (с искаженными цветами) скопировать обратно в исходный файл - все становится на свои места.  
 
Собственно вопрос - что бы это могло быть (какая-то настройка?) и как это можно победить.  
 
Я уже придумал некоторый способ, как с этим можно бороться - прогнать по всем ячейкам макросом что-то вроде  
ActiveCell.Interior.Color=ActiveCell.Interior.Color  
и тоже самое для шрифтов, границ ячеек и т.д.  
Это поможет, но способ представляется мне несколько колхозным и хотелось бы понять причину данного явления, а не просто бороться с последствиями....  
 
Заранее всем благодарен  
 
В прикрепленном файле картинка, как это выглядет ДО и После
 
ну и собственно оригинальный excel-файл
 
2003. Обратил внимание на то, что при активации одинаковых ячеек в "правильном" и "неправильном" файлах на панели инструментов "Цвет заливки" активна одинаковая ПОЗИЦИЯ (координаты) выбранного цвета. А вот сама цветовая гамма сбита. Например, на позиции красного - серый 25%, синего тоже нет на "своём" месте - вместо него цветовая схема...  
Скорее всего несовпадение палитр.
 
У меня иногда такое наблюдается при нескольких открытых книгах, только цвета блеклые становятся. После закрыть-открыть восстанавливается. Книги с разных источников, мысль та же - несоответствие палитр.  
А вот как их подружить?
 
При вставке на другой лист, жмем на чемоданчик, и выбираем вставку с сохранением исходного форматирования.  
У меня цвета преобразовались в цвета оригинала.  
см скрин
Редко но метко ...
 
Спасибо всем!  
 
Несоответствие палитр - похоже на правду (что с этим делать сейчас подумаю)  
 
Сохранение исходного формотирования - вообще прекрасно! Может быть есть идеи, как проделать эту операцию с копированием не диапазона, а листа?  
 
Потихоньку наступает понимание...
 
используйте такую конструкцию:  
Selection.Copy  
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme  
 
соответственно вставьте код создания новой книги и туда копируйте
Редко но метко ...
 
Инфа по теме: Надстройка ZVI_TrueColors.xla   
http://www.planetaexcel.ru/forum.php?thread_id=3229
 
мое молчание вызвано не невежливостью, а тем что я пробую предлагаемые варианты, изучаю ссылки - в конце обязательно напишу, как в итоге решил проблему :)
 
итак, до чего я дошел:  
 
попробовал реализовать через специальную вставку, получился такой модуль:  
Sub ColorCorrect()  
   Dim WB As Workbook  
   Dim WBN As Workbook  
   Dim sh As Worksheet  
   Dim c, d  
     
   Set WB = ActiveWorkbook  
   Set WBN = Workbooks.Add  
   c = WBN.Sheets.Count  
     
   For Each sh In WB.Sheets  
       WBN.Sheets.Add after:=WBN.Sheets(WBN.Sheets.Count)  
       WBN.Sheets(WBN.Sheets.Count).Name = sh.Name & "_new"  
       sh.Cells.Copy  
         
       With WBN.Sheets(WBN.Sheets.Count)  
           .Paste  
           .Cells.PasteSpecial Paste:=xlPasteColumnWidths  
           .Cells.PasteSpecial Paste:=xlPasteAllUsingSourceTheme  
       End With  
   Next sh  
     
   Application.DisplayAlerts = False  
       For d = 1 To c  
           WBN.Sheets(1).Delete  
       Next d  
   Application.DisplayAlerts = True  
End Sub  
 
все бы ничего, но как оказалось, корежит рисунки в отчетах :(  
 
Внимательно изучил ссылки - тема интересная, но немного не про то - там убирается цвет вообще  
 
пришлось вернуться к своей первоначальной идее:  
 
Sub ColorCorrect()  
   Dim c As Range  
   Dim sh As Worksheet  
   Dim i As Integer  
     
   For Each sh In ActiveWorkbook.Sheets  
       For Each c In sh.UsedRange  
           c.Interior.Color = c.Interior.Color  
           c.Font.Color = c.Font.Color  
           For i = 1 To 4  
               If Not c.Borders(i).LineStyle = xlNone Then c.Borders(i).Color = c.Borders(i).Color  
           Next i  
       Next c  
   Next sh  
   MsgBox "Done"  
End Sub  
 
Всем спасибо за участие!!!
Страницы: 1
Наверх