将多个工作簿合并为一个后,颜色格式化会丢失

时间:2019-06-26 03:35:38

标签: excel vba ssrs-2012

我有几个结构不同的SSRS报告(.xls文件):

  • 报告1内有3个Excel工作表。
  • 报告2内有2个Excel工作表。
  • 报告3内有4个Excel工作表。

我希望所有这9个excel工作表都合并到具有不同工作表的单个Excel文件中,也就是说,我的最终excel文件应该具有所有这9个工作表,我可以使用下面的宏代码来实现。

Path = "C:\Users\FILES\" ' This will fetch all the files form the mentioned location
Filename = Dir(Path & "*.xls")
Do While Filename <> ""
    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
    For Each Sheet In ActiveWorkbook.Sheets
        Sheet.Copy After:=ThisWorkbook.Sheets(1)
    Next Sheet
    Workbooks(Filename).Close
    Filename = Dir()
Loop

Application.DisplayAlerts = False ' Delete an extra sheet
Worksheets("SHEET1").Delete
Application.DisplayAlerts = True

Application.DisplayAlerts = False ' This will create a new excel file and stores all the data in to it.
ThisWorkbook.CheckCompatibility = False
ThisWorkbook.SaveAs Filename:="C:\Users\merge.xls", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = True

Application.DisplayAlerts = False ' Save and exit
ThisWorkbook.Save
Application.DisplayAlerts = True
Application.Quit  

我面临的唯一问题是合并VBA代码的文件时,不包括SSRS报告中一些单元格所应用的颜色。

如何在不丢失已经应用的颜色格式的情况下复制excel文件?

2 个答案:

答案 0 :(得分:0)

使用.Copy.PasteSpecial,通常应避免使用它们,但在这种情况下,它们似乎是唯一的解决方案...

  

原因:
  发生此问题的原因是SQL Server Reporting Services 2008和SQL Server Reporting Services 2008 R2都使用自​​定义调色板而不是Excel附带的内置调色板。报告中使用的前56种独特颜色是在自定义调色板中定义的。

     

解决方法:
  您可以使用以下方法之一解决此问题,具体取决于您在环境中使用的Excel版本:

     

Excel 2007或Excel 2010:使用以下方法之一:

     

方法1:按以下步骤使用Ctrl + C和Ctrl + V组合:

     

通过在源工作簿中按Ctrl + C复制源数据。   在新工作簿中,使用以下方法之一保留源格式:   右键单击并从“编辑”菜单中选择“选择性粘贴”选项,然后通过选择“使用所有源主题”选项来粘贴数据。   要么   在新工作表中按Ctrl + V后,在“粘贴选项”中选择“保留源格式”。

     

使用此方法时需要注意的一个警告是,行高和列宽可能不会延续到新工作簿中。要保持行高和列宽,可以先将“移动”或“复制工作表”移到新工作簿中,以确保可以接受列宽和行高,然后再次使用源格式复制内容。

     

方法2:通过以下附加步骤使用“移动”或“复印表”操作:

     

在执行“移动或复制图纸”以将图纸复制到另一个工作簿之后,请执行以下操作:   转到“文件”菜单,然后在左窗格中选择“选项”。   在“ Excel选项”页面中,选择“保存”选项。   在保留工作簿的外观下,单击颜色...按钮。   在“颜色”页的“从以下位置复制颜色”列表框中,选择从SQL Server Reporting Services导出的源Excel文件。   单击确定两次,以关闭所有选项窗口。

     

您还可以使用类似于以下内容的宏代码来自动化此解决方法:

Sub Sample() 
    Sheets("OriginalExcelSheetExportedFromReport").Select 
    Sheets("OriginalExcelSheetExportedFromReport ").Copy 
    ActiveWorkbook.Colors = Workbooks("OriginalExcelSheetExportedFromReport.xls").Colors 
End Sub
     

Excel 2003:通过以下附加步骤使用“移动”或“复制工作表”操作:

     

在执行“移动或复制工作表”以将工作表复制到另一个工作簿之后,请执行以下操作:   转到工具菜单,然后单击选项。   选择“颜色”选项卡,然后在“从以下位置复制颜色”列表框中,选择从SQL Server Reporting Services导出的源Excel文件。单击“确定”关闭对话框。

来源:Microsoft Support 2465477
类似问题:https://stackoverflow.com/a/6447743/10223558

我们正在尝试,您可以尝试下面的代码来避免ActiveWorkbook

Do While Filename <> ""
    With Workbooks.Open(Filename:=Path & Filename, ReadOnly:=True)
        For Each Sheet In .Sheets
            Sheet.Copy After:=ThisWorkbook.Sheets(1)
        Next Sheet
        .Close
    End With
    Filename = Dir()
Loop

答案 1 :(得分:0)

我发现了问题所在,对代码进行了更改,添加了一行,将颜色从源文件复制到了新文件中。

Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)  

***ActiveWorkbook.Colors = Workbooks(Filename).Colors***