我一直在开发一个 VBA 宏,它可以根据电子表格中的某些值生成 PPT 演示文稿。该宏调用我创建的 PPT 模板,并将指定的值粘贴到我在模板演示文稿中输入的占位符上。
我的问题来自以下几行代码,我正在创建一个应该读取的文本:
Flow_coolant =(导入的单元值)dPCoolant2 +(导入的单元值)dPCoolant +(导入的单元值)
其中“Coolant”为下标,“2”为上标,表示幂。
Set PPSlide9 = myPresentation.Slides(9)
With PPSlide9.Shapes("Text Placeholder 1").TextFrame
With .TextRange.Lines(4)
.Text = "FlowCoolant = " & Range("DT_Motor_a") & " dPCoolant2 + " & Range("DT_Motor_b") & " dPCoolant + " & Range("DT_Motor_c") & " [L/min]"
.Characters(5, 7).Font.Subscript = msoTrue
.Characters(25, 7).Font.Subscript = msoTrue
.Characters(32, 1).Font.Superscript = msoTrue
.Characters(46, 7).Font.Subscript = msoTrue
End With
End With
从代码中可以看出,我指定了某个字符顺序号来制作下标和上标。但是,当导入的单元格值返回负值或整数作为下标和上标时,这种方法效果不佳,因为字符串中的总字符数会发生变化,因此会被分配给不正确的字符。
有没有办法将文本“Coolant”指定为下标,而不是像我所做的那样指定字符号 5-12 下标: .Characters(5, 7).Font.Subscript = msoTrue
谢谢!
这是一种令牌替换方法(作为 PPT VBA 发布,但您可以适应在 Excel 中使用):
Sub Tester()
Dim shp As Shape
Set shp = ActivePresentation.Slides(1).Shapes(1)
replaceToken shp, "<v1>", 25
replaceToken shp, "<v2>", 30
replaceToken shp, "<v3>", 10
End Sub
Sub replaceToken(shp As Shape, token As String, v)
Dim p As Long
With shp.TextFrame2.TextRange
p = InStr(1, .Text, token, vbTextCompare)
If p > 0 Then
.Characters(p, Len(token)).Text = v
End If
End With
End Sub
之前和之后: