【问题标题】:VBA code to manipulate Office 365 theme colors?用于操作 Office 365 主题颜色的 VBA 代码?
【发布时间】:2018-07-05 02:58:58
【问题描述】:

我正在尝试查找或找出用于更改所附图像中显示的 Office 365 主题和颜色的 VBA 代码。我在 MSDN 上和网上偶尔发现了 msoThemeColor 和 msoThemeColorIndex 参考资料。但根本没有实质性的东西。我也查看了 VBA 站点和 MVP 站点,但没有成功。

我的目标是定义我自己命名的主题颜色集(大约 8 种颜色、色调和阴影),以某种方式将其添加到列表中,对其进行修改,然后稍后将其从列表中删除。

其次,一旦我加载了它,我想让我当前的文档使用主题,使用主题色调和阴影等等。

有没有人有任何指示或例子可以引导我朝着正确的方向前进?谢谢

更新:不想因为我的问题似乎太不专注而遭受死亡之吻,这是我在网上花了几个小时(几乎没用)和 Word VBA 对象浏览器中发现的一些代码(我想有点用处 - 请参阅代码)。

我在我检查过的任何对象中都找不到下图中显示的名称字段,即使名称必须存储在某个位置,因为它显示在屏幕上。我在网上搜索 VBA 网站、Word 网站、MVP 网站或 stackexchange 几个小时都找不到一个相关的例子。

   Dim x As OfficeTheme
   Dim mycolor As ThemeColor
   Dim mythemecolorscheme As ThemeColorScheme
   Dim mycolorindex As MsoThemeColorIndex
   Dim mythemecolorschemeindex As MsoThemeColorSchemeIndex

   ' I have no idea if these statements do anything useful
   ' And I certainly have not been able to find the Name field in the VBA object browser
   ' This is all in Word, not Excel

   setname = mythemecolorscheme.Colors(msoThemeAccent2)
   foobar = mythemecolorscheme.Count

   x = OfficeTheme.ThemeColorSchemeIndex(1)
   x.ThemeColorScheme.Colors.RGB = RGB(255, 0, 0)
   x.ThemeColorScheme.Count
   x.ThemeColorScheme.Save (myfilename)
   x.ThemeColorScheme.Load (myfilename)

好像从来没有人尝试过这个,这很难相信。

谢谢,凯文

【问题讨论】:

  • 不幸的是(这是一个有趣的问题/话题),这将是太宽泛在这里无法有意义地回答(见tourminimal reproducible example)...看进入Workbook.Styles 的成员,其中包括一个Add 方法。

标签: vba colors ms-word


【解决方案1】:

主题在 Office Open XML 文件中定义,扩展名为 thmx。在内部,这些“属于”PowerPoint - 如果您双击它,PowerPoint 将打开该主题中的新演示文稿。但其他 Office 应用程序也使用它们。

使用 .zip 扩展名重命名 thmx 文件,您可以看到构成主题的 XML 文件。您还将看到基本的 PowerPoint 演示文稿定义。

您可以在 Program files/Microsoft Office/Document Themes [版本号] 中找到这些 Office 安装。您的自定义主题位于C:\Users\[user profile]\AppData\Roaming\Microsoft\Templates\Document Themes

如果您只对颜色感兴趣,这些是直接的 XML 文件,可以在上述任一路径的 Theme Colors 文件夹中找到。您可以定义自己的颜色 xml 文件并将其保存到 C:\Users[User profile]\AppData\Roaming\Microsoft\Templates\Document Themes\Theme Colors,所有 Office 应用程序都可以使用该文件。打开其中一个并更改它,使用任何 Office 应用程序中可用的工具定义您自己的文件,或者如果您不想随代码分发 XML 文件,则使用 (VBA) 代码从头开始编写文件。

您使用

将自定义配色方案加载到 Word
ActiveDocument.Documenttheme.ThemeColorScheme.Load "file path & name*"

有关详细信息,请参阅此 useful information 以及 Office Open XML Ecma 规范。

更新:MSDN documentation here. 中有一个合理的例子

【讨论】:

  • 感谢您的帮助!我可以想象编写 VBA 代码来操作您提供的位置中的文件和内容。编写代码来创建文件,然后编写更多代码将文件加载到环境中感觉有点奇怪——感觉就像在 80 年代使用 Lisp!我假设要删除现有的主题颜色集,我只需删除文件并重新启动 Office 应用程序?
  • @Kevin 我想是这样,但这不是我工作的领域,所以我不知道。您可以尝试将其作为一个单独的问题提出并将其标记为 PowerPoint,因为这些人显然更熟悉这部分技术:-) 我不知道您是否可以在 Office 运行并加载文件时删除该文件...您可以在退出时以及启动应用程序时尝试。主题列表可能是“按需”加载的,因此最好在应用程序重新启动时删除。 OTOH,如果打开了任何 Office 应用程序,则可以通过该应用程序加载方案...
  • 嗨 Cindy,我想你是对的。我的 VBA 代码将在 Office 应用程序的已运行、已加载主题的实例中运行。当(或现在,如果)我编写 VBA 代码来操作运行 Word 实例可能使用的文件时,我会牢记您的优点。到时候我会小心地将我的结果报告给这个线程。 -凯文
  • 我尝试了上面的一些代码来创建和保存一个主题,它在 Word 2016 中立即可见。提示:(1) 你不会像你做其他所有事情一样.Add("mynewtheme")。主题的名称取自 XML 文件。 (2) 在msdn.microsoft.com/en-us/vba/office-shared-vba/articles/… 的文档中有一个合理的示例可以帮助您入门
  • 感谢您对此的跟进 :-) 我认为扩展我提供的信息很重要 - 您已获得我的许可 edit 我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多