【问题标题】:insert caption word vba 2010插入标题字 vba 2010
【发布时间】:2016-03-27 07:34:17
【问题描述】:

我在 Word 2013 中制作了一个简单的 VBA 宏,一切正常。 当我尝试在 Word 2010 中运行它时,它会以运行时错误号退出。 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 中无法正常工作;但是,我找不到任何关于此的文档。

【问题讨论】:

  • 欢迎来到 SO!可以包含错误信息吗?

标签: vba ms-word caption word-2010


【解决方案1】:

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

在 Word 2013 中,可能已经存在名为“图片”的标题,这就是您在 2013 年看不到错误的原因。显然,在 2010 年它还没有出现,因此出现了错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多