2015-12-21 2 views
2

Я сделал простой макрос VBA в Word 2013, и все работает отлично. Когда я пытаюсь запустить его в Word 2010, он завершает работу с ошибкой во время выполнения нет. 4198.insert caption word vba 2010

Рабочий код, который вставляет несколько изображений в 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 

End Sub

бит, который не запускается:

'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; однако я не мог найти никакой документации по этому вопросу.

+0

Добро пожаловать в SO! Можете ли вы включить сообщение об ошибке? –

ответ

1

Проблема, я считаю, заключается в том, что в начале вашего кода вы создаете подпись под надписью «Фотография», но в разделе, где вы действительно вставляете подпись, вы используете метку «Изображение». (Это, кстати, также есть то, что в комментарии для создания метки ...)

В Word 2013 возможно, что подпись под названием «Картинка» уже присутствует, поэтому вы не видите ошибку в 2013 году. По-видимому, это еще не в 2010 году, таким образом, ошибка.

Смежные вопросы