![]() |
#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] |
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
henhelm | Word VBA | 15 | 02-07-2023 05:35 PM |
![]() |
macaronipasta | Word VBA | 2 | 06-27-2021 06:28 PM |
![]() |
NewbieLearning | Word VBA | 15 | 11-14-2017 05:03 AM |
![]() |
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 |