【发布时间】: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