首页 > 解决方案 > 更换 PowerPoint 演示文稿中的字体时遇到问题

问题描述

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

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

在这种情况下,有问题的字体称为“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 ItalicUnsupported font file format (AAT)和 Noto Sans 符号。

标签: vbareplacefontspowerpoint

解决方案


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

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

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


推荐阅读