【问题标题】:Split Text in .TextRange在 .TextRange 中分割文本
【发布时间】:2021-05-31 07:20:54
【问题描述】:

我的目标是拆分列表。目前,我正在使用Shapes().TextFrame.TextRange 来读取形状中的文本。我们可以使用Mid()来分割字符;但是,我想知道如何拆分这些行,因为每行中的字符各不相同。

我只想在 MsgBox 中显示第二行(比如说)。我该如何进行?

谢谢!

【问题讨论】:

  • 通常你会使用Split(yourText, vbLf),但你没有准确解释你在这里想要实现的目标 - 将拆分成什么
  • 抱歉,不清楚,我只想在 MsgBox 中显示第二行。拆分后如何处理?

标签: vba powerpoint


【解决方案1】:

让 PPT 为您完成繁重的工作:

With ActiveWindow.Selection.ShapeRange(1)
    With .TextFrame.TextRange
        MsgBox .Paragraphs(2)
    End With
End With

【讨论】:

    【解决方案2】:

    分割文本的命令是Split,见https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/split-function

    Dim t As String, tokens() As String, i As Long
    t = "ABC,DEF,,XYZ"
    tokens = Split(t, ",")
    For i = LBound(tokens) To UBound(tokens)
        Debug.Print i, tokens(i)
    Next
    

    会在变量tokens 中为您提供一个包含 4 个元素的数组。这始终是 0 索引:

     0            ABC
     1            DEF
     2            
     3            XYZ
    

    现在您只需要知道定义换行符的字符。如果您在 Powerpoint 中创建了形状,那就是回车字符,在 VBA 中有一个常量vbCr

     Dim sh As Shape
     set sh = ActivePresentation.Slides(1).Shapes(1) 
     t = sh.TextFrame.TextRange
     tokens = Split(t, vbCr)
    

    Word 中的工作方式相同,但在 Excel 中似乎需要使用 TextFrame2,分隔符是换行符:

     t = sh.TextFrame2.TextRange
     tokens = Split(t, vbLf)
    

    【讨论】:

      【解决方案3】:

      您的问题在文本框中无需任何拆分即可解决?

       Sub test1()
      
      Dim resultString As String
      
      resultString = ActivePresentation.Slides(1).Shapes(3).TextFrame.TextRange
      
      MsgBox resultString
      
      End Sub
      

      结果:

      只有在ppt主标题框内的文本才需要拆分,注意下面代码中无法显示的特殊字符:

      Sub test1()
      
      Dim resultString As String
      Dim sArray
      Dim i As Long
      
      sArray = Split(ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange, "")
      
      resultString = ""
      For i = LBound(sArray) To UBound(sArray)
          If resultString <> "" Then
              resultString = resultString & vbNewLine & sArray(i)
          Else
              resultString = sArray(i)
          End If
      Next
      
      MsgBox resultString
      
      End Sub
      

      带有特殊字符的代码

      输出:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-09
        • 2013-06-16
        • 2020-05-27
        • 1970-01-01
        相关资源
        最近更新 更多