【问题标题】:Trouble Replacing Fonts in PowerPoint Presentation更换 PowerPoint 演示文稿中的字体时遇到问题
【发布时间】:2020-07-02 17:21:24
【问题描述】:

我无法更改(即“替换”)我继承的演示文稿中使用的两种给用户带来问题的字体。

我将演示文稿设置为嵌入字体,但由于我没有相关字体,我无法像往常一样修复它(即,通常有相关字体并打开文件并再次关闭它嵌入字体,没有更多问题。)

在这种情况下,有问题的字体称为“Times”(不是“Times New Roman”,只是“Times”),如果我没记错的话,我认为这是一种古老的 PostScript 字体,这将是一个问题因为,据我了解,PowerPoint 不支持 PostScript 字体。

无论如何,我想用“Arial”替换字体,我知道这通常可以通过 Replace > Replace Font 轻松完成。 . .但是,由于某种原因,它没有在这个文件中使用。我会告诉 PowerPoint 替换它,它似乎做了一些事情,然后 . . .没有变化。

所以。 . .我前往谷歌并尝试了一些东西(PPTools 可能提到的一个是将文件转换为 HTML 并返回,据说可以修复(即“删除”)演示文稿中的一些亚洲和其他不受支持的字体。但我不能不知道如何将演示文稿保存为 O365 中的网页离线(PowerPoint 2019),这是不行的(我似乎找不到“另存为”或“导出”HTML 或 Web 的选项Page,正如推荐的那样。因此我开始寻找 VBA。

我的第一次尝试是这样,因为我发现最初用于将远东字体更改为 Arial:

Sub ChgFarEastFontsToArial()
    Dim oSh As Shape
    Dim oSl As Slide

    For Each oSl In ActivePresentation.Slides
        For Each oSh In oSl.Shapes
            If oSh.HasTextFrame Then
                oSh.TextFrame.TextRange.Font.NameFarEast = "Arial"
            End If
        Next
    Next

    For Each oSh In ActivePresentation.SlideMaster.Shapes
        If oSh.HasTextFrame Then
            oSh.TextFrame.TextRange.Font.NameFarEast = "Arial"
        End If
    Next

    If ActivePresentation.HasTitleMaster Then
        For Each oSh In ActivePresentation.TitleMaster.Shapes
            If oSh.HasTextFrame Then
                oSh.TextFrame.TextRange.Font.NameFarEast = "Arial"
            End If
        Next
    End If

End Sub

当我不更改任何内容时,它运行时不会出错,但由于我实际上并不想更改远东字体,所以它对我没有帮助。

我的下一个尝试是这样的:

Sub ReplaceFontToArial()
  Dim objSingleWord As Range
  Dim objDoc As Presentation

  Set objDoc = ActivePresentation

  With objDoc
    For Each objSingleWord In .Words
      If objSingleWord.Font.Name = "Times" Then 
        objSingleWord.Font.Name = "Arial"
      End If
    Next
  End With
End Sub

但是,突出显示 ObjSingleWord As Range 并声明 Compile error: User-defined type not defined 时出错。

然后,根据 Microsoft VBA 参考文档的建议,我尝试了:

Sub ReplaceFontToArial()
  With Application.ActivePresentation
    .Fonts.Replace Original:="Times", Replacement:="Arial"
  End With
End Sub

但是Run-time error '424': Object required 会出错。

我想解决这个问题。任何关于如何改变这种疯狂字体的想法都会很棒! (关于我上面的脚本为什么不起作用的建议也会有所帮助。)


仅供参考,如果有帮助,不会被替换的字体是:

Times Unsupported font file format (AAT)、Times Bold Unsupported font file format (AAT)、Times Italic Unsupported font file format (AAT)、Times Bold Italic Unsupported font file format (AAT) 和 Noto Sans 符号。

【问题讨论】:

  • 您可能希望将第二段(大文本块,又名文本墙)分成可读的段落。以目前的形式解析有点困难。
  • 我刚刚创建了一个新的空白演示文稿,创建了一个标题为 Test Title,并将该标题的字体设置为 Arial。然后,我在演示文稿中添加了一个仅包含 Application.ActivePresentation.Fonts.Replace "Arial", "Times Roman" 的宏,然后逐步执行该代码。它不仅没有产生您指出的错误,而且按预期替换了字体。我可以重现该代码问题的唯一方法是重新开始并且 not 更改空白表中的任何内容,这显然意味着在向工作表添加新字体之前不会分配 Fonts .
  • @KenWhite 我照你说的做了,并在 VBA 编辑器中输入了以下名为“MSReplaceFont”的宏,如下所示:Application.ActivePresentation.Fonts.Replace "Times", "Arial"。我仍然收到Run-time error '424': Object required
  • 我可以在这里重现错误;如果我尝试替换演示文稿未使用的字体,则会发生错误。由于不支持 PS 字体,而且您在任何情况下都没有该字体,因此 PPT 正在用不同的字体代替 Times;也许这就是问题的根源。我有一个尚未准备好迎接黄金时段的加载项,这可能会有所帮助。如果您想在某处发布您的问题文件并在此处弹出一个指向它的链接,我会试一试。

标签: vba replace fonts powerpoint


【解决方案1】:

Times 是一种 Mac 字体(AAT 是 Apple Advanced Typography)。对于顽固字体,我首选的技术是将文件结尾更改为 .zip,将文件解压缩为 OOXML,然后使用 NotePad++ 等文本编辑器对所有文件运行查找和替换。

查找:typeface="Times" 替换:typeface="Arial"

然后重新压缩并重命名回 .pptx。制作该文件的副本以进行实验。此方法也适用于更改 PowerPoint 语言设置。

【讨论】:

  • 约翰,这听起来像是我想要的方向,因为我的脚本都没有工作。 “将文件解压缩到 OOXML”是什么意思?
  • 将文件结尾更改为“.zip”或在名称中添加“.zip”。与您要执行此操作的操作系统确认。解压缩文件。编辑 XML 文件。重新压缩。以下是更多详细信息:brandwares.com/bestpractices/2015/02/… Mac 用户:brandwares.com/bestpractices/2015/11/…
  • 我会试一试并报告。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
相关资源
最近更新 更多