Converting A PPT To Word Using VBA Macros
Posted by Author, Curator, Visually Impared Squirrel Literacy Advocate & Dynamics AX Technical Solution Professional (TSP) at Microsoft on
I was tinkering with an idea and thought that I would pass this on to you all just in case you could use it.
I create all of my walkthroughs and scripts in PPT (just in case I want to use them in presentations, and also they look tidy).
But if I want to use them as a blog post or create a white paper on them then I have to transfer all of the images and text by hand – the export as handouts does not export out the images and text in a way that they can be reformatted in Word.
So I looked around and found one PPT Macro that would walk through the PPT and convert it into a Word document element by element. I tinkered with it and created the following Macro:
Sub WriteToWord()
Dim aSlide As Slide
Dim aTable As Table
Dim aShape As Shape
Dim TablesCount As Integer
Dim ShapesCount As Integer
Dim MyDoc As New Word.Document
Dim MyRange As Word.Range
Dim i As Word.Paragraph
On Error Resume Next
With MyDoc
.Application.Visible = False
.Application.ScreenUpdating = False
For Each aSlide In ActivePresentation.Slides
For Each aShape In aSlide.Shapes
Set MyRange = .Range(.Content.End – 1, .Content.End – 1)
Select Case aShape.Type
Case msoTextBox
aShape.TextFrame.TextRange.Copy
MyRange.Paste
With MyRange
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.ParagraphStyle = “Normal”
.Font.ColorIndex = wdBlack
End With
Case msoAutoShape
If aShape.TextFrame.HasText Then
aShape.TextFrame.TextRange.Copy
MyRange.Paste
With MyRange
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.ParagraphStyle = “Normal”
.Font.ColorIndex = wdBlack
End With
Else
aShape.Copy
MyRange.PasteSpecial DataType:=wdPasteMetafilePicture
ShapesCount = .Shapes.Count
With .Shapes(ShapesCount)
.LockAspectRatio = msoTrue
.ConvertToInlineShape
End With
End If
Case msoPlaceholder
Select Case aShape.PlaceholderFormat.ContainedType
Case msoAutoShape
If aShape.TextFrame.HasText Then
aShape.TextFrame.TextRange.Copy
MyRange.Paste
With MyRange
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.ParagraphStyle = “Normal”
.Font.ColorIndex = wdBlack
End With
Else
aShape.Copy
MyRange.PasteSpecial DataType:=wdPasteMetafilePicture
ShapesCount = .Shapes.Count
With .Shapes(ShapesCount)
.LockAspectRatio = msoTrue
.ConvertToInlineShape
End With
End If
Case msoPicture
aShape.Copy
MyRange.PasteSpecial DataType:=wdPasteMetafilePicture
ShapesCount = .Shapes.Count
With .Shapes(ShapesCount)
.LockAspectRatio = msoTrue
.ConvertToInlineShape
End With
Case msoTextBox
aShape.TextFrame.TextRange.Copy
MyRange.Paste
With MyRange
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.ParagraphStyle = “Normal”
.Font.ColorIndex = wdBlack
End With
End Select
.Content.InsertAfter Chr(13)
Case msoPicture
aShape.Copy
MyRange.PasteSpecial DataType:=wdPasteMetafilePicture
ShapesCount = .Shapes.Count
With .Shapes(ShapesCount)
.LockAspectRatio = msoFalse
.Width = Word.CentimetersToPoints(14)
.Height = Word.CentimetersToPoints(6)
.Left = wdShapeCenter
.ConvertToInlineShape
End With
.Content.InsertAfter Chr(13)
Case msoEmbeddedOLEObject, msoLinkedOLEObject, msoLinkedPicture, msoOLEControlObject
aShape.Copy
MyRange.PasteSpecial DataType:=wdPasteOLEObject
ShapesCount = .Shapes.Count
With .Shapes(ShapesCount)
.LockAspectRatio = msoFalse
.Width = Word.CentimetersToPoints(14)
.Height = Word.CentimetersToPoints(6)
.Left = wdShapeCenter
.ConvertToInlineShape
End With
.Content.InsertAfter Chr(13)
Case msoTable
aShape.Copy
MyRange.Paste
TablesCount = .Tables.Count
.Content.InsertAfter Chr(13)
End Select
Next
If aSlide.SlideIndex < ActivePresentation.Slides.Count Then
.Content.InsertAfter Chr(13)
End If
.UndoClear ‘ Clear used memory
Next
With .Content.Find
.ClearFormatting
.Format = True
.Font.Color = wdColorWhite
.Replacement.Font.Color = wdColorAutomatic
.Execute Replace:=wdReplaceAll
End With
MsgBox “PPT Converted to WORD completed”, vbInformation + vbOKOnly, “ExcelHome/ShouRou”
.Application.Visible = True
.Application.ScreenUpdating = True
End With
End Sub
It’s not perfect, but it does scrape the PPT and create a Word document:
All that is left to do is format it which is the easy part.
If anyone knows how to create Add-Ins for PPT and code this in Visual Studio then I will hand over full rights to this idea as long as I can use it
Share this post
- 0 comment
- Tags: Uncategorized
0 comment