VBA-Powerpoint排序文本框基于其“顶部”和“左侧”属性

时间:2018-12-04 02:57:42

标签: vba sorting textbox powerpoint powerpoint-vba

我在PowerPoint幻灯片中有一堆文本框。 它们都包含文本。

我需要按顺序对这些文本框进行排序, 这样我就可以遍历这些文本框, 捕获文本, 并将其从左上角到右下导出到CSV文件

例如,如果我在幻灯片中有4个文本框,则需要捕获其中的文本 文本框,顺序为

  1. 左上文本框
  2. 右上文本框
  3. 左下文本框
  4. 右下角文本框

将文本框的文本导出到CSV文件的部分代码(我来自互联网)可以正常工作。除了它们故障

Sub ExportTextToCSV()

    Dim oPres As Presentation
    Dim oSlides As Slides
    Dim oSld As Slide         'Slide Object
    Dim oShp As Shape         'Shape Object
    Dim sTempString As String
    Dim Quote As String
    Dim Comma As String
    Dim myText As String
    Dim myFilePath As String

    myFilePath = ".\Export_Textbox.CSV"
    Quote = Chr$(34)
    Comma = ","

    Set oPres = ActivePresentation
    Set oSlides = oPres.Slides

    For Each oSld In oSlides  'Loop thru each slide
      For Each oShp In oSld.Shapes   'Loop thru each shape on slide

        'Check to see if shape has a text frame and text
        If oShp.HasTextFrame And oShp.TextFrame.HasText Then
            myText = Replace(oShp.TextFrame.TextRange.Text, vbCr, vbCrLf)
            sTempString = sTempString & Quote & myText & Quote & Comma
        End If

      Next oShp

      'Add new line in CSV
      sTempString = sTempString & vbCrLf

      'Print the result to file:
      Call WriteToTextFileADO(myFilePath, sTempString, "UTF-8")

      'Clear the string
      sTempString = ""

    Next oSld
End Sub

Sub WriteToTextFileADO(filePath As String, strContent As String, CharSet As String)
    Set stm = CreateObject("ADODB.Stream")

    'if file exist, append
    If Len(Dir(filePath)) > 0 Then
        stm.Type = 2
        stm.Mode = 3
        stm.Open
        stm.CharSet = CharSet
        stm.LoadFromFile filePath
        stm.Position = stm.Size
        stm.WriteText strContent
        stm.SaveToFile filePath, 2
        stm.Close
    Else
        stm.Type = 2
        stm.Mode = 3
        stm.Open
        stm.CharSet = CharSet
        stm.WriteText strContent
        stm.SaveToFile filePath, 2
        stm.Close
    End If

    Set stm = Nothing
End Sub

根据stackoverflow的帖子“ VBA For each - loop order”,内容为:

  

“形状在z轴上的位置对应于形状的索引   Shapes集合中的数字。”

我正在考虑在运行之前先创建并运行一个宏,以根据文本框形状的“顶部”和“左侧”属性重新设置所有形状的z顺序 ExportTextToCSV()宏。

在使用ShapeRange或Collection,在幻灯片中添加对EXPORTING SHAPES的引用以及根据其“ Top”和“ Left”属性对它们进行排序时,我遇到了麻烦。

请帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

  

使用ADO创建断开连接的记录集,并使用文本框填充它   名称,文本,顶部和左侧属性,然后按顶部和左侧排序   位置。使用它来填充您的文本文件。参见例如:   developer.rhino3d.com/guides/rhinoscript/…– 23小时前的蒂姆·威廉姆斯

有效。感谢您为我指出正确的方向!

如果您不介意,请重新发布您的评论作为答案,以便我将其标记为答案。