Как изменить размер графического объекта в поле LINK?
После специальной вставки ссылки на диапазон ячеек из Excel в Word (2013) поле выглядит следующим образом:
{ LINK Excel.SheetMacroEnabled.12 D:\\20181228\\SC.xlsm Sheet1!R10C1:R10C20" \a \p }
Если щелкнуть правой кнопкой мыши на объекте, выбрать "Форматировать объект", а затем нажать "?", Откроется справочная статья " Формат автоматической формы".
Тем не мение, ActiveDocument.Shapes.SelectAll
не обнаруживает этот объект.
Этот код также не работает, хотя в сообщении об ошибке говорится, что этот компонент доступен для изображений и объектов OLE:
With ActiveDocument.Shapes(1).PictureFormat
.ColorType = msoPictureGrayScale
.CropBottom = 18
End With
Что это за объект? Я не могу найти его в объектной модели (Word).
Как получить к нему доступ через VBA? Я хочу программно изменить размер группы таких объектов до 90% от оригинала.
Upd. @ Синди Майстер предложила, где копать, спасибо. Я написал код, кажется, работает нормально:
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 ответ
Поле 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