2016-10-07 2 views
1

Я написал код для клиента, который работает неправильно на своем компьютере (Win 10, Office 365), но находится на моем (Win 10, Office 2016). Код вставляет изображение в заголовок, затем позиционирует его и изменяет его размеры. Я использую метод ConvertToShape, поэтому я могу получить доступ к таким свойствам, как ширина, высота и положение класса Shape.Word VBA: метод ConvertToShape делает изображение исчезающим

Dim pic As Shape 
Dim shp As Word.InlineShape 

Set shp = thisDocument.Sections.Item(1).Headers(wdHeaderFooterPrimary).Range.InlineShapes.AddPicture(fpImage) ' insert the image to the header 

Set pic = shp.ConvertToShape ' THIS LINE CAUSES THE PROBLEM 

Метод приводит к исчезновению изображения. «Pic» по-прежнему доступен, и настройка его свойств не вызывает ошибок, но это не видно. Это свойство .visible возвращает true.

Любые идеи? Благодарю.

+0

Отрицательный 1 * это * 'true', поэтому Shape.Visible уже верно. Это единственная фигура в заголовке? – Comintern

+0

О да, вы правы https://msdn.microsoft.com/en-us/library/office/ff860737.aspx Я поправлю сообщение. Да, это единственная форма в заголовке – Absinthe

ответ

1

Ответ предоставляется кросс-пост в Microsoft Community

Существует способ сделать это только с инлайн формы, путем создания таблицы, чтобы расположить текст слева и изображение справа. Дополнительным преимуществом этого метода является то, что если вы установите для свойства AutoFitBehavior таблицы значение wdAutoFitFixed и установите ширину столбца по ширине, которую вы хотите для фигуры, Word автоматически изменит размер изображения до этой ширины и сохранит соотношение сторон.

Вот небольшой пример макроса:

Sub x() 
    Dim fpImage As String 
    Dim strExistingHeaderText 
    Dim tbl As Table 
    Dim shp As InlineShape 

    fpImage = "D:\Pictures\bunnycakes.jpg" 

    With ActiveDocument 
     strExistingHeaderText = _ 
     .Sections(1).Headers(wdHeaderFooterPrimary).Range.Text 

     Set tbl = .Tables.Add(_ 
     Range:=.Sections(1).Headers(wdHeaderFooterPrimary).Range, _ 
     numrows:=1, numcolumns:=2, _ 
     AutoFitBehavior:=wdAutoFitFixed) 
     tbl.Columns(2).Width = InchesToPoints(1.5) 
     tbl.Columns(1).Width = InchesToPoints(5#) 
     tbl.Cell(1, 1).Range.Text = strExistingHeaderText 
     'tbl.Borders.Enable = False 

     Set shp = tbl.Cell(1, 2).Range.InlineShapes.AddPicture(fpImage) 
    End With 
End Sub