在PowerPoint中使用VBA更改字体
如何使用VBA使PowerPoint演示文稿中的字体保持一致 我是VBA新手,所以我使用的代码可能完全错误,但这里是:在PowerPoint中使用VBA更改字体,vba,powerpoint,Vba,Powerpoint,如何使用VBA使PowerPoint演示文稿中的字体保持一致 我是VBA新手,所以我使用的代码可能完全错误,但这里是: Sub FontChange() Dim sld As Slide Dim shp As Shape For Each sld In ActivePresentation.Slides For Each shp In sld.Shapes shp.TextFrame.TextRange.Font .Size =
Sub FontChange()
Dim sld As Slide
Dim shp As Shape
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
shp.TextFrame.TextRange.Font
.Size = 12
.Name = "Bauhaus 93"
.Bold = False
.Color.RGB = RGB(255, 127, 255)
Next shp
Next sld
End Sub
提前感谢您的帮助。下面的代码应该可以工作。请注意,您的原始版本没有测试形状的“类型”,或者正如@Tim所指出的,您缺少了“With…” 此外,我对文本形状的测试的类型为14,这是一个“占位符”。如果代码没有更改某些要更改的字体,则可能需要检查其他类型
Option Explicit
Sub FontChange()
Dim sld As Slide
Dim shp As Shape
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
If shp.Type = msoPlaceholder Then
With shp.TextFrame.TextRange.Font
.Size = 12
.Name = "Bauhaus 93"
.Bold = False
.Color.RGB = RGB(255, 127, 255)
End With
End If
Next shp
Next sld
如果您想更改占位符中不存在的文本,请将Sub的几个mod改为Wayne的版本。还有一些测试,以确保有问题的形状a)可以包含文本(像线条这样的形状不能),如果是,b)有一些文本需要修改
Option Explicit
Sub FontChange()
Dim sld As Slide
Dim shp As Shape
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
If shp.HasTextFrame Then ' Not all shapes do
If shp.TextFrame.HasText Then ' the shape may contain no text
With shp.TextFrame.TextRange.Font
.Size = 12
.Name = "Bauhaus 93"
.Bold = False
.Color.RGB = RGB(255, 127, 255)
End With
End If
End If
Next shp
Next sld
End Sub
当你运行它时发生了什么?你没有真正解释你的问题。看起来您需要一个
with
和end with
语句。它突出显示“TextFrame”,并在ActivePresentation with.TextFrame.TextRange.Font.Size=48.Name=“Bauhaus 93”中显示“未找到方法或数据成员”Sub Font().Bold=True.Color.RGB=RGB(255,127,255)结束时带有结束子项
^上述使用结束时带有
和结束时带有
的代码也有相同的问题。什么“相同的问题”?你得到了什么错误?当我这次运行代码时,它说“指定的值超出范围”,然后突出显示“With shp.TextFrame.TextRange.Font”行。有什么想法吗?我也不知道你说的14型和占位符是什么意思-你能解释一下吗?很抱歉,我今天刚被介绍到VBA,所以还不太了解术语。您是否复制并粘贴了我的全部代码(加上掉在外面的该死的“End Sub”?如果没有,那么您必须这样做,或者显示您正在尝试使用的确切代码。对于“Type14”注释,您的代码在幻灯片上的每个控件中循环-不仅仅是文本-因此某些“形状”可能没有“文本”属性。在“如果shp.Type=msoPlaceholder Then”行中,检查形状类型是否为14(相当于msoPlaceholder)。可能还有其他形状类型的字体需要更改,这意味着您也需要检查这些类型。我复制并粘贴了整个代码(包括位于外部的“End Sub”)。我现在使用的甲板没有特殊形状。只有4张白色幻灯片,每张幻灯片上有3个随机句子。我想在测试不同的代码时保持它的超级简单。但是谢谢你解释类型注释-随着我的进步,这肯定会很有用。根据我找到的另一篇文章(),你可以尝试在“With…”之前插入一行“On Error Resume Next”,看看会发生什么。我会继续找。。。幻灯片上只有一个形状吗?那会导致。。。