![]() |
|
#16
|
|||
|
|||
|
seems to work well
I have changed the padding to zero in this line HPad = CentimetersToPoints(0.15): VPad = CentimetersToPoints(0.05) and seems to work fine I have left this line as is though 0 x 2 may be a problem I have tested it with 30 black images and I am getting a white line down at the end of the 3rd column going all the way down, is this a bug in word I also need to have it so it does not allow break across pages please |
|
#17
|
||||
|
||||
|
By setting VPad to 0, you may end up with pics overlapping the top/bottom cell borders. By setting HPad to 0, you'll be back to your previous issue with text occupying the full cell width.
I cannot see how you could end up with rows being split across a page break, as all you have in each cell is either a single pic or a single line of text. Plus, unless you've modified your version of the Caption Style to have the 'Keep with Next' attribute, captions and their pics would be forced to appear on the same page. The display issue may be related to your display driver.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#18
|
|||
|
|||
|
whatever I do I am having an issue
now the images are not being reduced to fit the box so I am back to my original script and will forget about the padding, just now need centring of the caption I will give it a go and if I cannot succeed will let you know |
|
#19
|
||||
|
||||
|
The code in post #15 does all of that.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#20
|
|||
|
|||
|
thank you, I will work through it
|
|
#21
|
|||
|
|||
|
thank you so much for your help and persistence.
I can comfortably say the template looks great. thank you |
|
#22
|
|||
|
|||
|
Hi Paul
hope all is well, been using this off and on and have been making changes manually so I am hoping you can help I need to refine it for the following please biggest issue is that long file names are being cut off, we tried scaling the caption but this did not work well, is there a way of wrapping the caption text for images with long file names, other things I would like is to have the the table centred on page and to amend the caption font size, italics, colour bold etc this is the macro as it stands that I am using, thank you kindly Code:
Sub Add_PicsinTable_with_Captions()
Application.ScreenUpdating = False
Dim i As Long, j As Long, c As Long, r As Long, NumCols As Long, iShp As InlineShape
Dim oTbl As Table, TblWdth As Single, StrTxt As String, RowHght As Single, ColWdth As Single
Dim HPad As Single, VPad As Single, PicHght As Single, PicWdth As Single
HPad = CentimetersToPoints(0#): VPad = CentimetersToPoints(0#)
On Error GoTo ErrExit
NumCols = CLng(InputBox("How Many Columns per Row?"))
RowHght = CentimetersToPoints(CSng(InputBox("What max row height for the pictures, in Centimeters (e.g. 5)?")))
ColWdth = CentimetersToPoints(CSng(InputBox("What max column width for the pictures, in Centimeters (e.g. 5)?")))
On Error GoTo 0
PicHght = RowHght - VPad * 2: PicWdth = ColWdth - HPad * 2
'MsgBox "PicWdth: " & PointsToCentimeters(PicWdth) & vbTab & "ColWdth: " & PointsToCentimeters(ColWdth)
'MsgBox "PicHght: " & PointsToCentimeters(PicHght) & vbTab & "RowHght: " & PointsToCentimeters(RowHght)
'Select and insert the Pics
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Select image files and click OK"
.Filters.Add "Images", "*.gif; *.jpg; *.jpeg; *.bmp; *.tif; *.png"
.FilterIndex = 2
If .Show = -1 Then
'Create a paragraph Style with 0 space before/after & centre-aligned
On Error Resume Next
With ActiveDocument
.Styles.Add Name:="TblPic", Type:=wdStyleTypeParagraph
On Error GoTo 0
With .Styles("TblPic").ParagraphFormat
.Alignment = wdAlignParagraphCenter
.KeepWithNext = True
.SpaceAfter = 0
.SpaceBefore = 0
End With
.Styles("Caption").ParagraphFormat.Alignment = wdAlignParagraphCenter
End With
'Add a 2-row by NumCols-column table to take the images
Set oTbl = Selection.Tables.Add(Range:=Selection.Range, NumRows:=2, NumColumns:=NumCols)
With ActiveDocument.PageSetup
TblWdth = .PageWidth - .LeftMargin - .RightMargin - .Gutter
If TblWdth / NumCols < ColWdth Then ColWdth = TblWdth / NumCols
End With
With oTbl
.AutoFitBehavior (wdAutoFitFixed)
.TopPadding = VPad
.BottomPadding = VPad
.LeftPadding = HPad
.RightPadding = HPad
.Spacing = 0
.Columns.Width = ColWdth
.Borders.Enable = True
.Range.Cells.VerticalAlignment = wdCellAlignVerticalBottom
End With
CaptionLabels.Add Name:="Picture"
For i = 1 To .SelectedItems.Count Step NumCols
r = ((i - 1) / NumCols + 1) * 2 - 1
'Format the rows
Call FormatRows(oTbl, r, RowHght)
For c = 1 To NumCols
j = j + 1
'Insert the Picture
Set iShp = ActiveDocument.InlineShapes.AddPicture( _
FileName:=.SelectedItems(j), LinkToFile:=False, _
SaveWithDocument:=True, Range:=oTbl.Cell(r, c).Range)
With iShp
.LockAspectRatio = True
If .Width < PicWdth Then .Width = PicWdth
If .Height > PicHght Then .Height = PicHght
End With
'Get the Image name for the Caption
StrTxt = Split(.SelectedItems(j), "\")(UBound(Split(.SelectedItems(j), "\")))
StrTxt = Split(Split(StrTxt, "")(UBound(Split(StrTxt, ""))), ".")(0)
'Insert the Caption on the row below the picture
With oTbl.Cell(r + 1, c)
With .Range
.Text = StrTxt
End With
End With
'Exit when we're done
If j = .SelectedItems.Count Then Exit For
Next
'Add extra rows as needed
If j < .SelectedItems.Count Then
oTbl.Rows.Add
oTbl.Rows.Add
End If
Next
Else
End If
End With
ErrExit:
Application.ScreenUpdating = True
End Sub
Sub FormatRows(oTbl As Table, x As Long, Hght As Single)
With oTbl
With .Rows(x)
.Height = Hght
.HeightRule = wdRowHeightExactly
.Range.Style = "TblPic"
End With
With .Rows(x + 1)
.Height = CentimetersToPoints(0#)
.HeightRule = wdRowHeightExactly
.Range.Style = "Caption"
End With
End With
End Sub
Last edited by macropod; 06-02-2025 at 05:10 AM. Reason: Added code tags for code formatting |
|
#23
|
||||
|
||||
|
For the caption font size, italics, colour bold etc., you should modify the Caption Style to suit.
To accommodate long file names, change: Code:
With .Rows(x + 1)
.Height = CentimetersToPoints(0#)
.HeightRule = wdRowHeightExactly
.Range.Style = "Caption"
End With
Code:
With .Rows(x + 1)
.Height = CentimetersToPoints(0#)
.HeightRule = wdRowHeightAtLeast
.Range.Style = "Caption"
End With
Code:
.Rows.Alignment = wdAlignRowCenter Code:
With oTbl
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#24
|
|||
|
|||
|
thank you for this
the table centring did not work, where do I put in the new code also I know realise my captions replacing spaces for "." dots and oddly where I have a dot in the file the caption is being truncated from the dot onwards eg file name 001 A 1917 P small closed AG.5.272.jpg produces a caption as 001 A 1917 P small closed AG appreciate your advise please as the file name is large that is why I was asking is there is a way of wrapping the text onto another line ? |
|
#25
|
||||
|
||||
|
You insert:
Code:
.Rows.Alignment = wdAlignRowCenter Code:
With oTbl Code:
StrTxt = Split(.SelectedItems(j), "")(UBound(Split(.SelectedItems(j), "")))
StrTxt = Split(Split(StrTxt, "")(UBound(Split(StrTxt, ""))), ".")(0)
Code:
StrTxt = Split(.SelectedItems(j), "\")(UBound(Split(.SelectedItems(j), "\")))
StrTxt = ": " & Left(StrTxt, InStrRev(StrTxt, "."))
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#26
|
|||
|
|||
|
thank you for the latest instructions
the result was a colon prefix and dots instead of spaces which I have been able to remove by replacing this StrTxt = Split(.SelectedItems(j), "")(UBound(Split(.SelectedItems(j), ""))) StrTxt = ": " & Left(StrTxt, InStrRev(StrTxt, ".")) with this StrTxt = Split(.SelectedItems(j), "")(UBound(Split(.SelectedItems(j), ""))) StrTxt = Left(StrTxt, InStrRev(StrTxt, ".")) but its still producing a dot as a suffix at the end of the caption also the caption is showing bottom row while it should be position on the top I cannot attach an image |
|
#27
|
|||
|
|||
|
I changed this to Top but its moving both the image and the caption
.Range.Cells.VerticalAlignment = wdCellAlignVerticalTop I want the image to be Bottom and the Caption to be Top of their respective rows please |
|
#28
|
||||
|
||||
|
Quote:
StrTxt = Split(.SelectedItems(j), "")(UBound(Split(.SelectedItems(j), ""))) It does nothing. And "the result was a colon prefix and dots instead of spaces" is bizzarre - the code doesn't replace your periods or spaces!
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#29
|
|||
|
|||
|
sorry,
meant to post this StrTxt = Split(.SelectedItems(j), "")(UBound(Split(.SelectedItems(j), ""))) StrTxt = Left(StrTxt, InStrRev(StrTxt, ".")) |
|
#30
|
||||
|
||||
|
Same as before. Kindly use the CODE tags when posting code.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
Macro for Inserting Multiple Photos from Excel List into Word
|
henhelm | Word VBA | 15 | 02-07-2023 05:35 PM |
Macro for Inserting Multiple Photos into Word but retrieving Captions from Excel Sheet
|
macaronipasta | Word VBA | 2 | 06-27-2021 06:28 PM |
I need a macro to automatically insert 4 pics per page in a word document with "Photograph No 1, 2,"
|
NewbieLearning | Word VBA | 15 | 11-14-2017 05:03 AM |
Captions: Changing captions in Appendix update all captions
|
carnestw | Word | 3 | 10-27-2015 12:34 PM |
| How do I type on multiple pics? | TimHudson | Drawing and Graphics | 0 | 07-28-2011 10:28 AM |