导出带格式的笔记

时间:2017-02-21 15:22:39

标签: vba powerpoint powerpoint-vba

我有以下用于Microsoft Powerpoint 365的宏,用于将注释导出到单独的.txt文件中。问题是它从笔记中的笔记中排除了要点。我该如何解决这个问题?

Sub ExportNotesText()

    Dim oSlides As Slides
    Dim oSl As Slide
    Dim oSh As Shape
    Dim strNotesText As String
    Dim strFileName As String
    Dim intFileNum As Integer
    Dim lngReturn As Long

    ' Get a filename to store the collected text
    strFileName = InputBox("Enter the full path and name of file to extract notes text to", "Output file?", ActivePresentation.Path + "\notes.txt")

    ' did user cancel?
    If strFileName = "" Then
        Exit Sub
    End If

    ' is the path valid?  crude but effective test:  try to create the file.
    intFileNum = FreeFile()
    On Error Resume Next
    Open strFileName For Output As intFileNum
    If Err.Number <> 0 Then     ' we have a problem
        MsgBox "Couldn't create the file: " & strFileName & vbCrLf _
            & "Please try again."
        Exit Sub
    End If
    Close #intFileNum  ' temporarily

    ' Get the notes text
    Set oSlides = ActivePresentation.Slides
    For Each oSl In oSlides
        For Each oSh In oSl.NotesPage.Shapes
        If oSh.PlaceholderFormat.Type = ppPlaceholderBody Then
            If oSh.HasTextFrame Then
                If oSh.TextFrame.HasText Then
                    strNotesText = strNotesText & "Slide: " & CStr(oSl.SlideIndex) & vbCrLf _
                    & oSh.TextFrame.TextRange.Text & vbCrLf & vbCrLf
                End If
            End If
        End If
        Next oSh
    Next oSl

    ' now write the text to file
    Open strFileName For Output As intFileNum
    Print #intFileNum, strNotesText
    Close #intFileNum

    ' show what we've done
    ' lngReturn = Shell("NOTEPAD.EXE " & strFileName, vbNormalFocus)

End Sub

1 个答案:

答案 0 :(得分:2)

一旦你有了TextFrame的注释,就可以遍历它的.TextRange.Paragraphs集合。

这会给你一个星号&amp;空间与和段落的文本或只是文本,如果没有子弹:

If .Paragraphs(x).ParagraphFormat.Bullet.Type = ppBulletUnnumbered Then
   Debug.Print "* " & .Paragraphs(x).Text
Else
   Debug.Print .Paragraphs(x).Text
End if

也可能有编号或图片子弹。我们不要去那里。