![]() |
#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 | 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 |