更改形状ppt内的字体

时间:2014-09-29 15:09:24

标签: vba excel-vba powerpoint excel

我通过VBA,用户表单和Excel自动生成powerpoint幻灯片。您在Excel中运行VBA脚本,填写数据,数据进入excel中的单元格,然后VBA脚本提取数据并将其放入幻灯片中的文本框形状。

我的问题是我想在不同的时间使用不同的字体大小,例如,一部分为28磅字体,其余部分为14磅。问题是我对文本框所做的任何属性更改都适用于形状中的所有文本。

我当前的解决方法是草率的,只是在原始文件上生成另一个文本框并在原文中插入间距,这样看起来更大的文本是"在"文本框实际上只是坐在几条空行上。

2 个答案:

答案 0 :(得分:0)

您可以格式化字符串中的特定子字符串,但这非常麻烦,例如假设shp是表示文本框的对象变量:

Sub foo()
Dim shp As Shape
Set shp = ActivePresentation.Slides(1).Shapes("TextBox 3")
    shp.TextFrame.TextRange.Text = "Hello, world!"
    shp.TextFrame.TextRange.Characters.Font.Size = 14 'applies uniform font to entire shape
    shp.TextFrame.TextRange.Characters(1, 5).Characters.Font.Size = 28

End Sub

示例输出:

enter image description here

当然困难在于使用混合格式,我认为没有任何简单解决方案。您需要确定需要“捕获”的格式,以及随后实现适当的条件逻辑以将这些格式传输到PowerPoint形状的内容。

一种可能的替代方案 - 如果我是你的话,这就是我要去的路线 - 将是从Excel复制单元格,并使用此方法粘贴到PowerPoint。我相信这将在PowerPoint幻灯片中创建一个由单个单元格组成的。您必须对大小/位置进行调整,但这比尝试捕获字体格式的每种可能变体都要容易一个数量级:

Sub foo2()
Dim shp As Shape
Dim xl As Object

    'Get Excel and copy a specific cell
    Set xl = GetObject(, "Excel.Application")
    xl.Workbooks("Book35").Sheets("Sheet2").Range("B4").Copy

    'Paste that cell in to PowerPoint as a table, preserving formats:
    ActivePresentation.Slides(1).Select
    Application.CommandBars.ExecuteMso "PasteSourceFormatting"

End Sub

从Excel单元格复制的示例输出:

enter image description here

答案 1 :(得分:-1)

无需更改excel中的字体以反映在Word中。你可以直接做到。只需在Word VBA中粘贴下面的mentinoed行: - Activedocument.Shapes(“sam”)。TextFrame.TextRange.Words(1).Font.Size = 28