![]() |
#1
|
|||
|
|||
![]()
Good Morning,
I have cobbled together the following macro from this site over the years that I use to post many photos in multiple reports each week. Word recently lost my macro so I went to my previous posts to recover much of what I had. The macro allows me to number the photos to make their order, then inserts the caption using only the filename after the initial number. I've had a guy on Upwork make me a different code for this photo insert macro that works, but only on the templates that he designed for me. So I'd like to go back to my original macro I made from here. I have always had to select the 30 to 50 photos/captions and adjust the tabs to center the photos/captions on the pages. Is there an easier way that I can do this? The photos are 3.5" high by 4.67" wide, perhaps the macro can automatically put everything between tabs at 7/8" and 5-9/16" Less important, because I make multiple report styles, is there a way that I can tell the macro to BOLD only the words Photograph and the field number also? Thank you so much for your time. Code:
Sub AddPics() 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, RwHght As Single, ColWdth As Single On Error GoTo ErrExit NumCols = 1 RwHght = InchesToPoints(3.5) On Error GoTo 0 '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 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 .LeftMargin = (InchesToPoints(1)) .RightMargin = (InchesToPoints(1)) TblWdth = .PageWidth - .LeftMargin - .RightMargin - .Gutter ColWdth = TblWdth / NumCols End With With oTbl .AutoFitBehavior (wdAutoFitFixed) .TopPadding = 0 .BottomPadding = 0 .LeftPadding = 0 .RightPadding = 0 .Spacing = 0 .Columns.Width = ColWdth .Borders.Enable = False End With CaptionLabels.Add Name:="Photograph" For i = 1 To .SelectedItems.Count Step NumCols r = ((i - 1) / NumCols + 1) * 2 - 1 'Format the rows Call FormatRows(oTbl, r, RwHght) 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 < ColWdth) And (.Height < RwHght) Then .Width = ColWdth If .Height > RwHght Then .Height = RwHght End If End With 'Get the Image name for the Caption StrTxt = Split(.SelectedItems(j), "\")(UBound(Split(.SelectedItems(j), "\"))) StrTxt = Left(StrTxt, InStrRev(StrTxt, ".") - 1) StrTxt = " - " & Right(StrTxt, Len(StrTxt) - Len(Split(StrTxt, " ")(0)) - 1) 'Insert the Caption on the row below the picture With oTbl.Cell(r + 1, c).Range .InsertBefore vbCr .Characters.First.InsertCaption _ Label:="Photograph", Title:=StrTxt, _ Position:=wdCaptionPositionBelow, ExcludeLabel:=False .Characters.First = vbNullString .Characters.Last.Previous = vbNullString .Font.Size = 12 .Font.Name = Calibri .Font.Italic = False .Font.ColorIndex = wdBlack .ParagraphFormat.Alignment = wdAlignParagraphCenter 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 oTbl.ConvertToText Else End If End With ErrExit: Application.ScreenUpdating = True With Selection.Find .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll 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" .Cells.VerticalAlignment = wdCellAlignVerticalCenter End With With .Rows(x + 1) .Height = InchesToPoints(1) .HeightRule = wdRowHeightExactly .Range.Style = "Caption" End With End With End Sub |
#2
|
||||
|
||||
![]()
Since you say the photos are 3.5" high by 4.67" wide, simply delete the TblWdth line and change
Code:
TblWdth = .PageWidth - .LeftMargin - .RightMargin - .Gutter ColWdth = TblWdth / NumCols Code:
ColWdth = InchesToPoints(4.67) Code:
With iShp .LockAspectRatio = True If (.Width < ColWdth) And (.Height < RwHght) Then .Width = ColWdth If .Height > RwHght Then .Height = RwHght End If End With Code:
oTbl.Borders.Enable = False oTbl.Rows.Alignment = wdAlignRowCenter Code:
Set oTbl = Selection.Tables.Add(Range:=Selection.Range, NumRows:=2, NumColumns:=NumCols) Code:
oTbl.ConvertToText As for: Code:
.Font.Size = 12 .Font.Name = Calibri .Font.Italic = False .Font.ColorIndex = wdBlack .ParagraphFormat.Alignment = wdAlignParagraphCenter Code:
.Words(1).Font.Bold = True .Words(2).Font.Bold = True I have no idea why you've added: Code:
With Selection.Find .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
|||
|
|||
![]()
I cannot thank you enough Macropod. This is great!
|
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Insert photo reference inside callout | brownees | Word VBA | 1 | 05-12-2024 04:36 PM |
Modifying Macropod's Macro (Insert Multiple Images with Caption) | stevenjohnson | Drawing and Graphics | 4 | 02-07-2024 09:07 AM |
![]() |
NicB | Word VBA | 2 | 09-24-2018 11:02 AM |
Word 2010 Run-Time error 4198 with Insert Picture with Caption and Fram Macro | jstills116 | Word VBA | 0 | 06-24-2016 07:46 AM |
![]() |
wabash12 | PowerPoint | 2 | 06-14-2013 06:32 AM |