![]() |
#1
|
|||
|
|||
![]() When an image goes to the bottom of page, it's caption goes to the next page. then I must make them together manually. Is it possible to make image and its caption together in one page automatically? |
#2
|
||||
|
||||
![]()
The behaviour is typically caused by the image and its caption being separate objects that lack any 'keep together' capacity.
The following macro embeds all Shapes & InlineShapes in a document in tables as InlineShapes with a row for Captions. Whatever positioning applied to the original Shape object will apply to the table also. To have the caption row appear above the image, instead of below, change the Rows(1) references to Rows(2), change the Cell(1, 1) references to Cell(2, 1) and change the change the Cell(2, 1) references to Cell(1, 1). Note that, due to the extra space taken up by the caption row, all except for the first of the document's pictures are liable to shift position. Once the macro has run, you'll need to move your captions into the empty table cell; after that, they should reliably stay together. Code:
Sub AddImageCaptionTables() Dim iShp As InlineShape, Rng As Range, Tbl As Table Dim i As Long, PicWdth As Single, PicHght As Single, VPos As Single Dim HPos As Single, VRel As Long, HRel As Long, BShp As Boolean With ActiveDocument For i = 1 To .InlineShapes.Count If .InlineShapes(i).Range.Information(wdWithInTable) = False Then With .InlineShapes(i) .LockAspectRatio = True PicWdth = .Width PicHght = .Height Set Rng = .Range End With With Rng If .Characters.Last.Next.Text = vbCr Then .Characters.Last.Next.Text = vbNullString .InlineShapes(1).Range.Cut End With BShp = False: VRel = 0: HRel = 0: VPos = 0: HPos = 0 Call MakeImageTable(Rng, PicWdth, PicHght, BShp, VRel, HRel, VPos, HPos) End If Next While .Shapes.Count > 0 BShp = True With .Shapes(1) .LockAspectRatio = True PicWdth = .Width PicHght = .Height VRel = .RelativeVerticalPosition HRel = .RelativeHorizontalPosition VPos = .Top HPos = .Left Set iShp = .ConvertToInlineShape End With With iShp Set Rng = .Range .Range.Cut End With Call MakeImageTable(Rng, PicWdth, PicHght, BShp, VRel, HRel, VPos, HPos) Wend End With End Sub ' Sub MakeImageTable(Rng As Range, PicWdth As Single, PicHght As Single, BShp As Boolean, _ VRel As Long, HRel As Long, VPos As Single, HPos As Single) Dim Tbl As Table, sngScl As Single 'Create & format the table Set Tbl = Rng.Tables.Add(Range:=Rng, Numrows:=2, NumColumns:=1) With Tbl .Borders.Enable = True .Columns.Width = PicWdth .TopPadding = 0 .BottomPadding = 0 .LeftPadding = 0 .RightPadding = 0 .Spacing = 0 .Rows(1).HeightRule = wdRowHeightExactly .Rows(1).Height = PicHght With .Rows .LeftIndent = 0 If BShp = True Then .WrapAroundText = True .HorizontalPosition = HPos .RelativeHorizontalPosition = HRel .VerticalPosition = VPos .RelativeVerticalPosition = VRel .AllowOverlap = False End If End With With .Cell(1, 1).Range With .ParagraphFormat .SpaceBefore = 0 .SpaceAfter = 0 .LeftIndent = 0 .RightIndent = 0 .FirstLineIndent = 0 .KeepWithNext = True End With .Paste End With With .Cell(2, 1).Range .Style = "Caption" .End = .End - 1 .InsertAfter vbCr .InsertCaption Label:="Figure", TitleAutoText:=" ", Title:="", _ Position:=wdCaptionPositionBelow, ExcludeLabel:=0 .Paragraphs.First.Range.Characters.Last.Text = vbNullString .Borders(wdBorderLeft).LineStyle = wdLineStyleNone .Borders(wdBorderRight).LineStyle = wdLineStyleNone .Borders(wdBorderTop).LineStyle = wdLineStyleNone End With End With End Sub With ActiveDocument to: With Selection and change: While .Shapes.Count > 0 With .Shapes(1) to: While .ShapeRange.Count > 0 With .ShapeRange(1)
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
|||
|
|||
![]()
Thank you very much
|
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Combining 2 objects into one image & making the gaps between them transparent? | wcngu1 | Visio | 0 | 11-29-2016 08:21 PM |
![]() |
ist4000 | Word | 3 | 04-18-2016 04:38 AM |
Losing image resolution when inserting image into MS word (2011: Mac) | Mario.N | Drawing and Graphics | 0 | 11-23-2014 02:38 AM |
![]() |
sandbad | Word | 1 | 11-05-2014 11:51 PM |
Autonomous image (and caption) in a paragraph | vincerollin | Word | 4 | 01-25-2014 05:09 AM |