【发布时间】:2019-09-11 18:15:07
【问题描述】:
我正在编写一个 PowerPoint VBA 宏来将在行首输入的项目符号字符(例如作为段落文本的一部分输入的“・”)更改为项目符号列表(即项目符号作为段落格式的一部分) .我希望列表中的项目符号看起来与作为键入字符的项目符号完全一样,这意味着我需要将 TextRange2.Characters(1).Font 中的所有格式信息复制到 TextRange2.ParagraphFormat.Bullet.Font 中,将项目符号字符作为键入文本复制到 TextRange2.ParagraphFormat.Bullet.Font 以获取新项目符号作为功能的段落格式。有没有一种快速的方法来做这样的深拷贝?
据我所知,我可能需要创建一堆助手 Subs 来深度复制所有 Font2 属性。 (我知道我不能只做Set TextRange2.ParagraphFormat.Bullet.Font = TextRange2.Characters(1).Font,因为TextRange2.ParagraphFormat.Bullet.Font 属性是只读的。)
这里有一些但不是全部的帮助者Subs,如果我遵循这条路线,我将需要。
Public Sub CopyFont2(destination As Font2, source As Font2)
Public Sub CopyFillFormat(destination As FillFormat, source As FillFormat)
Public Sub CopyGlowFormat(destination As GlowFormat, source As GlowFormat)
Public Sub CopyColorFormat(destination As ColorFormat, source As ColorFormat)
Public Sub CopyLineFormat(destination As ColorFormat, source As ColorFormat)
除了CopyFont2 和CopyFillFormat,我还没有开始写任何这些,如果可以的话,我宁愿避免写所有这些。有没有更简单的方法来对内置对象进行深度复制?还是有其他方法可以复制我缺少的字体格式?
【问题讨论】:
-
如果您从剪贴板生成新的 textrange 对象(即从源代码复制剪贴板,然后粘贴),您将获得深层复制...
-
这不是最佳做法,因为您在本地格式上叠加本地格式。如果您将 Slide Master 和 Slide Layouts 设置为您喜欢的格式,然后将每张幻灯片 重置更新布局的外观。
-
@MathieuGuindon 谢谢你的信息。不幸的是,我认为我可能处于不受支持的边缘情况,因为我试图复制到 BulletFormat2 对象,而不是 TextRange 或 TextRange2。
-
@JohnKorchok 感谢您提出这个问题。本地格式不是一个大问题,因为该应用程序用于准备文档以导入计算机辅助翻译程序,而不是用于制作强大的模板或演示文稿,这些模板或演示文稿可以持续使用超过其单一用途。不过,您的观点是一个很好的观点,因为我所走的路线会将一堆格式信息放在项目符号中
标签: vba powerpoint