【发布时间】: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