在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 =

如何使用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 = 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”,看看会发生什么。我会继续找。。。幻灯片上只有一个形状吗?那会导致。。。