MS Excel不会自动复制颜色主题

Sye*_*ury 0 vba themes colors excel-vba excel-2010

我正在使用MS Excel 2010我的公司为MS Excel 2010使用了一套标准配色方案/主题.我给它起了一个名字(companycolor).我有一个模板包含该颜色方案和一个宏来执行任务.当我按下宏按钮时,它会生成活动表的副本,保护它并通过电子邮件发送给预期的收件人.问题是,当宏将活动表复制到新工作簿时,它不会复制模板具有的配色方案/主题,我我的公司配色方案(companycolor)意味着所有单元格的颜色,图表和形状的颜色会受到干扰,并根据Excel默认颜色方案进行更改,这似乎很奇怪.您是否有任何方法可以解决这个问题或在这方面的任何建议

这是Snap Shot的链接!,帮助您更好地理解我的问题 *>>这是vba代码,它将活动工作簿的活动工作表副本复制到新工作簿中,保护它并通过电子邮件发送给它.***

Private Sub CommandButton2_Click()

Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim OutApp As Object
Dim OutMail As Object

If (Range("AQ5") <> "") Or (Range("AQ6") <> "") Then
Range("A5").Select

With Application
 .ScreenUpdating = False
 .EnableEvents = False
End With

Set Sourcewb = ActiveWorkbook
Application.ScreenUpdating = False

ActiveSheet.Copy

Range("A14").ClearContents
ActiveSheet.Protect Password:="1234567890"
Set Destwb = ActiveWorkbook

With Destwb
If Val(Application.Version) < 12 Then
    FileExtStr = ".xls": FileFormatNum = -4143
Else
    If Sourcewb.Name = .Name Then
        With Application
            .ScreenUpdating = True
            .EnableEvents = True
        End With
        MsgBox "Your answer is NO in the security dialog"
        Exit Sub
    Else
        Select Case Sourcewb.FileFormat
        Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
        Case 52:
            If .HasVBProject Then
                FileExtStr = ".xlsm": FileFormatNum = 52
            Else
                FileExtStr = ".xlsx": FileFormatNum = 51
            End If
        Case 56: FileExtStr = ".xls": FileFormatNum = 56
        Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
        End Select
    End If
 End If
 End With

 TempFilePath = Environ$("temp") & "\"
 TempFileName = "DI Status for " & Range("A17") & " Dated " & Format(Now, "dd-mmm-yy h-mm-ss")

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
 On Error Resume Next
 With OutMail
    .To = Range("AQ6").Value
    .CC = Range("AQ7").Value
    .BCC = ""
    .Subject = Range("AQ8").Value
    .Body = Range("AQ9").Value
    .Attachments.Add Destwb.FullName
    .Display
    Application.Wait (Now + TimeValue("0:00:00"))
    Application.SendKeys "%s"

End With
On Error GoTo 0
.Close savechanges:=False
End With


Kill TempFilePath & TempFileName & FileExtStr

Set OutMail = Nothing
Set OutApp = Nothing

With Application
.ScreenUpdating = True
.EnableEvents = True
End With

Application.ScreenUpdating = True
Set Sourcewb = Nothing
Set Destwb = Nothing
Set OutApp = Nothing
Set OutMail = Nothing
MsgBox ("Project Status Has been Sent")
 Else
MsgBox "There must be atleast one contact in the To, or Cc, field"
End If

End Sub
Run Code Online (Sandbox Code Playgroud)

下面是Microsoft Excel在创建任何新的颜色方案/主题时保存的颜色方案的xml编码,并将默认路径中的名为xml文件的配置文件保存 C:\Users\**UserName**\AppData\Roaming\Microsoft\Templates\Document Themes\Theme Colors

到目前为止,我已经得出结论,无论如何,如果我们能够将xml代码中的xml代码合并到上面的vba代码中,那么我们就可以获得所需的结果.但我不知道如何.

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<a:clrScheme name="mycompanytheme"
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
-<a:dk1>
      <a:sysClr lastClr="000000" val="windowText"/>
</a:dk1>
-<a:lt1>
      <a:sysClr lastClr="FFFFFF" val="window"/>
</a:lt1>
-<a:dk2>
      <a:srgbClr val="1F497D"/>
</a:dk2>
-<a:lt2>
      <a:srgbClr val="EEECE1"/>
</a:lt2>
-<a:accent1>
      <a:srgbClr val="D60037"/>
</a:accent1>
-<a:accent2>
      <a:srgbClr val="B21DAC"/>
</a:accent2>
+<a:accent3>
      -<a:accent4><a:srgbClr val="FFCE00"/>
</a:accent4>
-<a:accent5>
      <a:srgbClr val="009DD9"/>
</a:accent5>
-<a:accent6>
      <a:srgbClr val="AF0637"/>
</a:accent6>
      -<a:hlink><a:srgbClr val="80076B"/>
</a:hlink>
      -<a:folHlink><a:srgbClr val="218535"/>
</a:folHlink>
</a:clrScheme>
Run Code Online (Sandbox Code Playgroud)

Sye*_*ury 7

最后,我找到了一种方法让它工作!

描述解决方案,以便其他人可以从中获得帮助!这是结论,它的工作原理!首先,通过提供此vba代码的便捷路径,将其粘贴到具有任何特定颜色方案主题的文件上.

   ActiveWorkbook.Theme.ThemeColorScheme.Save("C:\myThemeColorScheme.xml")
Run Code Online (Sandbox Code Playgroud)

上面的代码将在您指定的路径中生成一个xml文件.

然后,粘贴下面的代码行,为您的"电子邮件发送"代码上方提供xml文件所在的路径.

ActiveWorkbook.Theme.ThemeColorScheme.Load("C:\myThemeColorScheme.xml")
Run Code Online (Sandbox Code Playgroud)

现在它将在新工作簿中复制主题.

默认情况下,主题配置位于

"C:\Users\UserName\AppData\Roaming\Microsoft\Templates\Document Themes\Theme Colors\themefile.xml")
Run Code Online (Sandbox Code Playgroud)