插入标题词 vba 2010

insert caption word vba 2010

我在 Word 2013 中制作了一个简单的 VBA 宏,一切正常。 当我尝试在 Word 2010 中 运行 它时,它退出并显示 run-time 错误号。 4198.

在MS Word 2013中插入多张图片的工作代码如下:

Sub AddPics()

Application.ScreenUpdating = False

Dim oTbl As Table, i As Long, j As Long, k As Long, StrTxt As String

Dim MarginLeft As Long, MarginRight As Long, TopDist As Long, BottomDist As Long

Dim NCols As Long, NRows As Long, TotalRows As Long
'Number of Columns and Rows of Pictures per page, total number of Rows in the table

Dim CaptionHeight As Long


NCols = 1
NRows = 2

CaptionHeight = CentimetersToPoints(0.7)

 '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

         'Add a 'Picture' caption label
        CaptionLabels.Add Name:="Photograph"
         'Add a 1-row by N-column table with adjusted columns to take the images
        TotalRows = Round(.SelectedItems.Count / NCols) * 2

        Set oTbl = Selection.Tables.Add(Selection.Range, TotalRows, NCols)

        For i = 1 To TotalRows
            With oTbl.Rows(i)
                If ((i Mod 2) = 1) Then
                        .Height = (ActiveDocument.PageSetup.PageHeight - ActiveDocument.PageSetup.TopMargin - ActiveDocument.PageSetup.BottomMargin - NRows * CaptionHeight) / NRows
                        .HeightRule = wdRowHeightExactly
                Else
                        .Height = CaptionHeight
                        .HeightRule = wdRowHeightExactly
                End If
            End With
        Next i
        'This loop has created a table

        i = 1

        For k = 1 To .SelectedItems.Count


            'Insert the Picture
            ActiveDocument.InlineShapes.AddPicture FileName:=.SelectedItems(k), _
            LinkToFile:=False, SaveWithDocument:=True, _
            Range:=oTbl.Cell(i, NCols - (k Mod NCols)).Range.Characters.First

            'Get the Image name for the Caption
            StrTxt = Split(.SelectedItems(k), "\")(UBound(Split(.SelectedItems(k), "\")))
            StrTxt = ": " & Split(StrTxt, ".")(0)

            **'Insert the Caption in the cell below the picture
            With oTbl.Rows(i + 1).Cells(NCols - (k Mod NCols)).Range
                .InsertBefore vbCr
                .Characters.First.InsertCaption _
                Label:="Picture", Title:=StrTxt, _
                Position:=wdCaptionPositionBelow, ExcludeLabel:=False
                .Characters.First = vbNullString
                .Characters.Last.Previous = vbNullString
            End With**

            'Jump along the rows
            If k Mod NCols = 0 Then
                i = i + 2
            End If

        Next k

        For Each oCell In oTbl.Range.Cells
            oCell.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
        Next oCell

    Else
    End If

End With
Application.ScreenUpdating = True

结束子

位,未能运行:

'Insert the Caption in the cell below the picture
            With oTbl.Rows(i + 1).Cells(NCols - (k Mod NCols)).Range
                .InsertBefore vbCr
                .Characters.First.InsertCaption _
                Label:="Picture", Title:=StrTxt, _
                Position:=wdCaptionPositionBelow, ExcludeLabel:=False
                .Characters.First = vbNullString
                .Characters.Last.Previous = vbNullString

            End With

你能告诉我这里有什么问题吗? 我怀疑 InsertCaption 方法在 MS Word 2010 中无法正常工作;但是,我找不到任何相关文档。

我认为,问题在于您在代码的开头创建了标题标签 "Photograph",但在您实际插入标题的部分中使用了标签 "Picture"。 (顺便说一下,这也是创建标签的评论中的内容...)

在 Word 2013 中,名为 "Picture" 的标题可能已经存在,这就是为什么您在 2013 年看不到错误的原因。显然,它在 2010 年不存在,因此出现错误。