У меня есть несколько текстовых полей на слайде PowerPoint.Все они содержат текст.
Мне нужно отсортировать эти текстовые поля по порядку , чтобы я мог проходить по этим текстовым полям, захватывать текст и экспортировать его в файл CSV , ПОРЯДОК, сверху-слева-внизу-справа.
Например, если у меня на слайде 4 текстовых поля, мне нужно захватить текст в текстовом поле в порядке
- текстовое поле TOP-LEFT
- Текстовое поле TOP-RIGHT
- Текстовое поле BOTTOM-LEFT
- Текстовое поле BOTTOM-RIGHT
Часть кода (полученная из Интернета), которая экспортирует текст текстового поля в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 Для каждого - порядка цикла ", он говорит:
"Позиция фигуры в z-порядке соответствует ее порядковому номеру в коллекции Shapes."
Я подумываю сначала создать и запустить макрос для re-установите все z-порядок фигур, основываясь на свойствах «Top» и «Left» формы текстового поля , прежде чем запускать макрос ExportTextToCSV ().
У меня проблемы с использованием ShapeRange или Collection, чтобы добавить ссылку на СУЩЕСТВУЮЩИЕ ФОРМЫ на слайде, и при сортировке их на основе их свойств "Top" и "Left".
Пожалуйста, помогите.Спасибо!