0

我正在使用 MS Excel 2010 我的公司为 MS Excel 2010 使用了一组标准配色方案/主题。我给它起了一个名字(companycolor)。我有一个模板,其中包含该配色方案和一个宏来执行任务。当我按下宏按钮时,它会复制活动表,保护它并将其通过电子邮件发送给预期的收件人。问题是当宏将活动表的副本复制到新工作簿中时,它不会复制模板具有的配色方案/主题,我意思是我公司的配色方案(companycolor),因此所有单元格的颜色、图表和形状的颜色都会根据 Excel 默认配色方案受到干扰和更改,这看起来很奇怪。你有什么办法可以克服这个问题或在这方面有什么建议吗

这是快照的链接!,帮助您更好地理解我的问题 * >>这是将活动工作表从活动工作簿复制到新工作簿的 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

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

到目前为止,我得出的结论是,无论如何,如果我们能够将下面的 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>
4

5 回答 5

7

终于我找到了让它工作的方法!

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

   ActiveWorkbook.Theme.ThemeColorScheme.Save("C:\myThemeColorScheme.xml")

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

然后,将下面的代码行粘贴到您的“电子邮件发送”代码上方,给出您的 xml 文件所在的相同路径。

ActiveWorkbook.Theme.ThemeColorScheme.Load("C:\myThemeColorScheme.xml")

现在它将把主题复制到一个新的工作簿中。

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

"C:\Users\UserName\AppData\Roaming\Microsoft\Templates\Document Themes\Theme Colors\themefile.xml")
于 2013-07-28T18:55:45.687 回答
1

在代码末尾,您可以调用以下函数,该函数将为您设置活动工作簿的调色板。您需要根据您公司的标准颜色主题调整 RBG。

 Sub SetColours()

        ActiveWorkbook.Colors(1) = RGB(140, 6, 12)
        ActiveWorkbook.Colors(2) = RGB(255, 255, 255)
        ActiveWorkbook.Colors(3) = RGB(255, 0, 0)
        ActiveWorkbook.Colors(4) = RGB(152, 196, 120)
        ActiveWorkbook.Colors(5) = RGB(0, 0, 255)
        ActiveWorkbook.Colors(6) = RGB(255, 215, 101)
        ActiveWorkbook.Colors(7) = RGB(248, 116, 122)
        ActiveWorkbook.Colors(8) = RGB(97, 176, 255)
        ActiveWorkbook.Colors(9) = RGB(128, 0, 0)
        ActiveWorkbook.Colors(10) = RGB(0, 128, 0)
        ActiveWorkbook.Colors(11) = RGB(19, 38, 78)
        ActiveWorkbook.Colors(12) = RGB(128, 128, 0)
        ActiveWorkbook.Colors(13) = RGB(128, 0, 128)
        ActiveWorkbook.Colors(14) = RGB(0, 128, 128)
        ActiveWorkbook.Colors(15) = RGB(192, 192, 100)
        ActiveWorkbook.Colors(16) = RGB(127, 114, 99)
        ActiveWorkbook.Colors(17) = RGB(153, 153, 255)
        ActiveWorkbook.Colors(18) = RGB(153, 51, 102)
        ActiveWorkbook.Colors(19) = RGB(255, 255, 204)
        ActiveWorkbook.Colors(20) = RGB(204, 255, 255)
        ActiveWorkbook.Colors(21) = RGB(102, 0, 102)
        ActiveWorkbook.Colors(22) = RGB(255, 128, 128)
        ActiveWorkbook.Colors(23) = RGB(0, 102, 204)
        ActiveWorkbook.Colors(24) = RGB(225, 225, 255)
        ActiveWorkbook.Colors(25) = RGB(0, 0, 128)
        ActiveWorkbook.Colors(26) = RGB(255, 0, 255)
        ActiveWorkbook.Colors(27) = RGB(255, 255, 0)
        ActiveWorkbook.Colors(28) = RGB(0, 255, 255)
        ActiveWorkbook.Colors(29) = RGB(128, 0, 128)
        ActiveWorkbook.Colors(30) = RGB(128, 0, 0)
        ActiveWorkbook.Colors(31) = RGB(0, 128, 128)
        ActiveWorkbook.Colors(32) = RGB(0, 0, 255)
        ActiveWorkbook.Colors(33) = RGB(131, 162, 225)
        ActiveWorkbook.Colors(34) = RGB(204, 255, 255)
        ActiveWorkbook.Colors(35) = RGB(204, 255, 204)
        ActiveWorkbook.Colors(36) = RGB(255, 255, 153)
        ActiveWorkbook.Colors(37) = RGB(153, 204, 255)
        ActiveWorkbook.Colors(38) = RGB(255, 153, 204)
        ActiveWorkbook.Colors(39) = RGB(204, 153, 255)
        ActiveWorkbook.Colors(40) = RGB(255, 204, 153)
        ActiveWorkbook.Colors(41) = RGB(51, 102, 255)
        ActiveWorkbook.Colors(42) = RGB(51, 204, 204)
        ActiveWorkbook.Colors(43) = RGB(153, 204, 0)
        ActiveWorkbook.Colors(44) = RGB(234, 148, 118)
        ActiveWorkbook.Colors(45) = RGB(255, 153, 0)
        ActiveWorkbook.Colors(46) = RGB(255, 102, 0)
        ActiveWorkbook.Colors(47) = RGB(102, 102, 153)
        ActiveWorkbook.Colors(48) = RGB(199, 190, 182)
        ActiveWorkbook.Colors(49) = RGB(0, 51, 102)
        ActiveWorkbook.Colors(50) = RGB(51, 153, 102)
        ActiveWorkbook.Colors(51) = RGB(40, 70, 55)
        ActiveWorkbook.Colors(52) = RGB(225, 168, 0)
        ActiveWorkbook.Colors(53) = RGB(212, 81, 33)
        ActiveWorkbook.Colors(54) = RGB(204, 160, 123)
        ActiveWorkbook.Colors(55) = RGB(98, 52, 72)
        ActiveWorkbook.Colors(56) = RGB(0, 0, 40)

    End Sub
于 2013-07-22T06:27:29.973 回答
0

使用 PasteSpecial 方法。

 With Range("A1:K1")
     .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
     SkipBlanks:=False, Transpose:=False
     Application.CutCopyMode = False
 End With

有关 PasteSpecial 的更多信息,请参阅此 链接

于 2013-07-22T05:44:11.883 回答
0

您也可以尝试以下方法

'Copy current colorscheme to the new Workbook
Dim Sourcewb As Workbook
Set Sourcewb = ActiveWorkbook
Dim Destwb As Workbook
Set Destwb = ActiveWorkbook
For i = 1 To 56
  Destwb.Colors(i) = Sourcewb.Colors(i)
Next i
于 2014-03-12T11:12:34.543 回答
0

另一个可能更优雅的解决方案是采用 ActiveWorkbook 正在使用的相同模板并将其应用于新创建的工作簿:

Set NewBook = Workbooks.Add("OriginalTemplate")

在这种情况下,“OriginalTemplate”是 ActiveWorkbook 的模板名称

于 2016-05-10T18:12:05.837 回答