Sub SelectorImagetoTable()
Application.ScreenUpdating = False
Dim iShp As InlineShape, Rng As Range, Tbl As Table
Dim i As Long, PicWdth As Single, VPos As Single
Dim HPos As Single, VRel As Long, HRel As Long
With ActiveDocument
'looks at each page and counts how many pictures
For i = 1 To .ComputeStatistics(wdStatisticPages)
Set Rng = .GoTo(What:=wdGoToPage, Name:=i)
Set Rng = Rng.GoTo(What:=wdGoToBookmark, Name:="\page")
If i = .ComputeStatistics(wdStatisticPages) Then
Rng.End = .Range.End
End If
With Rng
Select Case .ShapeRange.Count
Case 1
'if only one picture on the page
With .ShapeRange(1)
'dimensions of the picture
.LockAspectRatio = msoTrue
.Width = InchesToPoints(5)
'location of picture
.Left = InchesToPoints(0.55)
.Top = InchesToPoints(3.13)
End With
Set Rng = .InlineShapes(i).Range
With Rng
If .Characters.Last.Next.Text = vbCr Then .Characters.Last.Next.Text = vbNullString
.InlineShapes(1).Range.Cut
End With
'insert picture in row 1 column 1 and caption in row 2 column 1
Set Tbl = .Tables.Add(Range:=Rng, NumRows:=2, NumColumns:=1)
With Tbl
.Cell(1, 1).Range.Paste
Set Rng = .Cell(2, 1).Range
With Rng
.Style = "Caption"
.End = .End - 1
.InsertAfter vbCr
.InsertCaption Label:="Fig.", TitleAutoText:="InsertCaption1", _
Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=0
.Characters.First.Text = vbNullString
.Paragraphs.First.Range.Characters.Last.Text = vbNullString
'I had this working in a former macro for dimesion/
'location of caption...how would I implement?
'Set Box = ActiveDocument.Shapes.AddTextbox( _
' Orientation:=msoTextOrientationHorizontal, _
' Left:=0.44, Top:=9.3, Width:=5.18, Height:=0.44)
' Box.TextFrame.TextRange.Text = "Fig. "
'End With
End With
'no boarders on any boxes for clean look
.Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
.Borders(wdBorderRight).LineStyle = wdLineStyleSingle
.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
.Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
.Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
.TopPadding = 0
.BottomPadding = 0
.LeftPadding = 0
.RightPadding = 0
.Spacing = 0
.Columns.Width = InchesToPoints(5)
End With
Case 2
'if only one picture on the page
With .ShapeRange(2)
'dimensions/location of picture 1 and 2
With .ShapeRange(1)
'Problem ^ selecting the shape.
.LockAspectRatio = msoTrue
.Width = InchesToPoints(5)
.Left = InchesToPoints(0.55)
.Top = InchesToPoints(1.55)
End With
With .ShapeRange(2)
.LockAspectRatio = msoTrue
.Width = InchesToPoints(5)
.Left = InchesToPoints(0.55)
.Top = InchesToPoints(5.55)
End With
End With
Set Rng = .InlineShapes(i).Range
With Rng
If .Characters.Last.Next.Text = vbCr Then .Characters.Last.Next.Text = vbNullString
.InlineShapes(1).Range.Cut
End With
'insert picture 1 in row 1 and picture 2 into row 2
'insert caption in row 3
Set Tbl = .Tables.Add(Range:=Rng, NumRows:=3, NumColumns:=1)
With Tbl
.Cell(1, 1).ShapeRange(1).Paste
.Cell(2, 1).ShapeRange(2).Paste
Set Rng = .Cell(3, 1).Range
With Rng
.Style = "Caption"
.End = .End - 1
.InsertAfter vbCr
.InsertCaption Label:="Fig.", TitleAutoText:="InsertCaption1", _
Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=0
.Characters.First.Text = vbNullString
.Paragraphs.First.Range.Characters.Last.Text = vbNullString
'Set Box = ActiveDocument.Shapes.AddTextbox( _
' Orientation:=msoTextOrientationHorizontal, _
' Left:=0.44, Top:=9.3, Width:=5.18, Height:=0.44)
' Box.TextFrame.TextRange.Text = "Fig. "
'End With
End With
'no boarders on any boxes for clean look again
.Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
.Borders(wdBorderRight).LineStyle = wdLineStyleSingle
.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
.Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
.Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
.TopPadding = 0
.BottomPadding = 0
.LeftPadding = 0
.RightPadding = 0
.Spacing = 0
.Columns.Width = InchesToPoints(5)
End With
Case 3
'if there are 3 picture on the page
With .ShapeRange(3)
'dimensions/location of picture 1 and 2
With .ShapeRange(1)
.LockAspectRatio = msoTrue
.Width = InchesToPoints(4.6)
.Left = InchesToPoints(0.27)
.Top = InchesToPoints(0.25)
End With
With .ShapeRange(2)
.LockAspectRatio = msoTrue
.Width = InchesToPoints(4.6)
.Left = InchesToPoints(0.27)
.Top = InchesToPoints(3.75)
End With
With .ShapeRange(3)
.LockAspectRatio = msoTrue
.Width = InchesToPoints(4.6)
.Left = InchesToPoints(0.27)
.Top = InchesToPoints(7.25)
End With
End With
Set Rng = .InlineShapes(i).Range
With Rng
If .Characters.Last.Next.Text = vbCr Then .Characters.Last.Next.Text = vbNullString
.InlineShapes(1).Range.Cut
End With
'insert pic 1 =row 1, pic 2 =row 2, and pic 3 =row 3
'insert caption in row 1 column 2
Set Tbl = .Tables.Add(Range:=Rng, NumRows:=3, NumColumns:=2)
With Tbl
.Cell(1, 1).ShapeRange(1).Paste
.Cell(2, 1).ShapeRange(2).Paste
.Cell(3, 1).ShapeRange(3).Paste
Set Rng = .Cell(1, 2).Range
With Rng
.Style = "Caption"
.End = .End - 1
.InsertAfter vbCr
.InsertCaption Label:="Fig.", TitleAutoText:="InsertCaption1", _
Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=0
.Characters.First.Text = vbNullString
.Paragraphs.First.Range.Characters.Last.Text = vbNullString
'I had this working in a former macro for dimesion/
'location of caption...how would I implement?
'Set Box = ActiveDocument.Shapes.AddTextbox( _
' Orientation:=msoTextOrientationHorizontal, _
' Left:=4.5, Top:=0.7, Width:=2.5, Height:=1.5)
' Box.TextFrame.TextRange.Text = "Fig. "
'End With
'no boarders on any boxes for clean look again
.Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
.Borders(wdBorderRight).LineStyle = wdLineStyleSingle
.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
.Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
.Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
.TopPadding = 0
.BottomPadding = 0
.LeftPadding = 0
.RightPadding = 0
.Spacing = 0
.Columns.Width = InchesToPoints(5)
End With
End Sub