Как изменить размер графического объекта в поле LINK? - PullRequest
0 голосов
/ 28 декабря 2018

После вставки специальной ссылки диапазона ячеек из Excel в Word (2013) поле выглядит следующим образом:

{ LINK Excel.SheetMacroEnabled.12 D:\\20181228\\SC.xlsm Sheet1!R10C1:R10C20" \a \p }

Если щелкнуть объект справанажмите кнопку «Формат объекта», затем нажмите «?», откроется справочная статья Формат AutoShape .

Однако ActiveDocument.Shapes.SelectAll не обнаруживает этот объект.

Этот код также не работает, хотя в сообщении об ошибке говорится, что этот компонент доступен для изображений и объектов OLE:

With ActiveDocument.Shapes(1).PictureFormat 
 .ColorType = msoPictureGrayScale 
 .CropBottom = 18 
End With

Что это за объект?Я не могу найти его в объектной модели (Word).

Как получить к нему доступ через VBA?Я хочу программно изменить размер группы таких объектов до 90% от исходного.

Upd. @Cindy Meister предложила, куда копать, спасибо.Я написал код, кажется, работает нормально:

Sub ResizeImages()
Dim img As Long
With ActiveDocument
For img = 1 To .InlineShapes.Count
    With .InlineShapes(img)
        .ScaleHeight = 90
        .ScaleWidth = 90
    End With
Next img
End With
End Sub

1 Ответ

0 голосов
/ 30 декабря 2018

Поле Link должно быть InlineShape - оно не может быть Shape, если вы не можете отобразить поле, используя Alt + F9.Поскольку Shape объекты имеют форматирование текста, любые коды полей, связанные с ними (обычно нет), недоступны.

Поэтому любой объект, отображаемый через поле Link, должен быть доступен через InlineShapeобъектная модель.

Например, следующий код зацикливает поля в документе, и, если они связывают поля с источником Excel и содержат InlineShape, размеры InlineShape масштабируются:

Dim fld as Word.Field
For Each fld In ActiveDocument.Fields
    If fld.Type = wdFieldLink
      If fld.Result.InlineShapes.Count > 1 And _
         InStr(fld.OLEFormat.ClassType, "Excel") Then
           Set ils = fld.Result.InlineShapes(1)
           ils.ScaleWidth = 90
           ils.ScaleHeight = 90
      End If
    End If
Next
...