The code requires multiple changes for that. Try:
Code:
Sub AddPics()
Application.ScreenUpdating = False
Dim Stl As Style, 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 'CLng(InputBox("Cuantas columnas por fila?"))
RwHght = CentimetersToPoints(8) '(CSng(InputBox("¿Altura maxima de la fila?")))
On Error GoTo 0
'Selecciona e inserta fotos
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Seleccion de imagenes y click en Abrir"
.Filters.Add "Imagenes", "*.gif; *.jpg; *.jpeg; *.bmp; *.tif; *.png"
.FilterIndex = 2
If .Show = -1 Then
'Crea un Estilo de parrafo con 0 espacios antes/despues y alineado al centro.
With ActiveDocument
On Error Resume Next
Set Stl = .Styles("TblPic")
If Stl Is Nothing Then Set Stl = .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(wdStyleNormal).ParagraphFormat.SpaceBefore = 0
End With
'Agregue una tabla de 2 filas por NumCols-column para colocar las imágenes
Set oTbl = Selection.Tables.Add(Range:=Selection.Range, NumRows:=3, NumColumns:=NumCols)
With ActiveDocument.PageSetup
TblWdth = .PageWidth - .LeftMargin - .RightMargin - .Gutter
ColWdth = CentimetersToPoints(15) 'TblWdth / NumCols
End With
With oTbl
.AutoFitBehavior (wdAutoFitFixed)
.TopPadding = 0
.BottomPadding = 0
.LeftPadding = 0
.RightPadding = 0
.Spacing = 0
.Columns.Width = ColWdth
.Borders.Enable = True
'.Spacing = 9
End With
CaptionLabels.Add Name:="Fotografía nº"
For i = 1 To .SelectedItems.Count Step NumCols
r = ((i - 1) / NumCols + 1) * 3 - 2
'Formato de filas
Call FormatRows(oTbl, r, RwHght)
For c = 1 To NumCols
j = j + 1
'Inserta la foto
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
'Obtener el nombre de la imagen para el pie de foto
StrTxt = Split(.SelectedItems(j), "\")(UBound(Split(.SelectedItems(j), "\")))
StrTxt = ": " & Split(StrTxt, ".")(0)
'Inserta el título Caption en la fila debajo de la imagen
With oTbl
With .Cell(r + 1, c)
.Borders(wdBorderLeft).Visible = False
.Borders(wdBorderRight).Visible = False
End With
With .Cell(r + 2, c).Range
.InsertBefore vbCr
.Characters.First.InsertCaption Label:="Fotografía nº", Title:=StrTxt, _
Position:=wdCaptionPositionBelow, ExcludeLabel:=False
.Characters.First = vbNullString
.Characters.Last.Previous = vbNullString
End With
End With
'Salir cuando hayamos terminado
If j = .SelectedItems.Count Then Exit For
Next
'Agregue filas adicionales según sea necesario
If j < .SelectedItems.Count Then
oTbl.Rows.Add
oTbl.Rows.Add
oTbl.Rows.Add
End If
Next
' oTbl.ConvertToText
With oTbl
For r = .Rows.Count - 2 To 3 Step -3
.Split .Rows(r)
Next
End With
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"
.Cells.VerticalAlignment = wdCellAlignVerticalCenter
End With
With .Rows(x + 1)
.Height = CentimetersToPoints(0.5)
.HeightRule = wdRowHeightExactly
.Range.Style = wdStyleNormal
End With
With .Rows(x + 2)
.Height = CentimetersToPoints(0.5)
.HeightRule = wdRowHeightExactly
.Range.Style = wdStyleNormal
.Cells.VerticalAlignment = wdCellAlignVerticalCenter
End With
End With
End Sub
PS: Please don't post the same question in multiple threads.