![]() |
|
#31
|
|||
|
|||
|
StrTxt = ": " & Left(StrTxt, InStrRev(StrTxt, ".")) this was producing ":" prefix so I removed it sorry I am learning as I go, what is a code tag |
|
#32
|
||||
|
||||
|
Well that's in the code because there's supposed to be a colon after the Caption word...
Code tags are inserted via the # on the toolbar. You post your code between them.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#33
|
|||
|
|||
|
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
.Rows.Alignment = wdAlignRowCenter
.AutoFitBehavior (wdAutoFitFixed)
.TopPadding = VPad
.BottomPadding = VPad
.LeftPadding = HPad
.RightPadding = HPad
.Spacing = 0
.Columns.Width = ColWdth
.Borders.Enable = True
.Range.Cells.VerticalAlignment = wdCellAlignVerticalTop
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 = Left(StrTxt, InStrRev(StrTxt, "."))
'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 = wdRowHeightAtLeast
.Range.Style = "Caption"
End With
End With
End Sub
also I would like the image to be Bottom and the Caption to be Top of their respective rows please |
|
#34
|
||||
|
||||
|
Replace:
Code:
StrTxt = ": " & Left(StrTxt, InStrRev(StrTxt, ".")) Code:
StrTxt = ": " & Left(StrTxt, InStrRev(StrTxt, ".") - 1)
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#35
|
|||
|
|||
|
that worked perfectly
my last issue is the alignment of the image and caption please |
|
#36
|
||||
|
||||
|
You have put the vertical alignment code in the wrong place. You don't need:
Code:
.Range.Cells.VerticalAlignment = wdCellAlignVerticalTop Code:
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 = CentimetersToPoints(0.5)
.HeightRule = wdRowHeightAtLeast
.Range.Style = "Caption"
.Cells.VerticalAlignment = wdCellAlignVerticalTop
End With
End With
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#37
|
|||
|
|||
|
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
.Rows.Alignment = wdAlignRowCenter
.AutoFitBehavior (wdAutoFitFixed)
.TopPadding = VPad
.BottomPadding = VPad
.LeftPadding = HPad
.RightPadding = HPad
.Spacing = 0
.Columns.Width = ColWdth
.Borders.Enable = True
.Range.Cells.VerticalAlignment = wdCellAlignVerticalTop
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 = Left(StrTxt, InStrRev(StrTxt, ".") - 1)
'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 = wdRowHeightAtLeast
.Range.Style = "Caption"
End With
End With
End Sub
|
|
#38
|
||||
|
||||
|
I can't see the point of you posting code that doesn't have the suggested changes.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#39
|
|||
|
|||
|
I cannot see where I would place your last instruction, I have attached my macro as it stands currently
|
|
#40
|
||||
|
||||
|
All you need to is delete:
Code:
.Range.Cells.VerticalAlignment = wdCellAlignVerticalTop
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#41
|
|||
|
|||
|
ok its almost there, sorry to keep asking you.
but now while I can see the wrapping of the caption is working unfortunately the row height is not increasing automatically I know the wrapping is working as I manually expand the caption row to see the wrapping |
|
#42
|
||||
|
||||
|
You can change:
wdRowHeightExactly to: wdRowHeightAtLeast (see edited previous post) but this could result in different caption rows having different heights, or you could just change the row height (e.g. to 1cm) so all caption rows have the same height.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#43
|
|||
|
|||
|
thank you, I don't mind different row heights, however I just tried wdRowHeightAtLeast and it did not work
|
|
#44
|
||||
|
||||
|
Works for me...
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#45
|
|||
|
|||
|
oh, can you send me your full code please
|
|
| Thread Tools | |
| Display Modes | |
|
|
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 |