有没有一种分配下标/上标的方法,如下所示?

问题描述 投票:0回答:1

我一直在开发一个 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

谢谢!

excel vba powerpoint
1个回答
0
投票

这是一种令牌替换方法(作为 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

之前和之后:

© www.soinside.com 2019 - 2024. All rights reserved.