Некоторые версии Word имеют тенденцию отталкивать графический объект от страницы (слишком высоко, слишком низко, слишком далеко влево или вправо). Новый графический движок был представлен с новыми форматами файлов и, вероятно, (по крайней мере, частично) ответственен за эту разницу между doc и docx.
Для примера в вопросе файлы doc интерпретируют позиционные свойства относительно StoryRange
, в который вставляется Shape
. Для файлов docx это, скорее всего, будет относиться к странице документа, а не к конкретному Story
. (Ссылка на язык для AddPicture
упоминает относительно холст для рисования .)
Код в вопросе помещает графическое изображение на 50 пунктов сверху вниз, что толкает его ниже страницы в файле doc . В файле docx изображение располагается в верхней части документа.
Следующий пример кода, основанный на коде в вопросе, показывает, как это можно сделать, протестировав SaveFormat
документа. Возможны другие форматы сохранения, это касается только двух обсуждаемых форматов файлов.
'Insert Shape into Footer
'behaves differently for doc/docx
Sub CATMain()
Dim strPathImg As String
strPathImg = "C:\Test\avatar.jpg"
Dim wrdApp
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Dim myWrdDoc
Set myWrdDoc = 'wrdApp.Documents.Open("C:\Test\Document.doc") 'change path for .docx to: "C:\Test\Document.docx"
Dim wrdFootShape
Set wrdFootShape = myWrdDoc.Sections.Last.Footers(1).Shapes
Dim objPic As Object
Dim posPic As Double
'Convert position in centimeters to points for the AddPicture method
posPic = CentimetersToPoints(2)
If myWrdDoc.SaveFormat = 0 Then
'correction for doc file
posPic = posPic - myWrdDoc.PageSetup.PageHeight + myWrdDoc.PageSetup.TopMargin
ElseIf myWrdDoc.SaveFormat = 12 Then
'docx file
posPic = posPic
End If
Set objPic = wrdFootShape.AddPicture(fileName:=strPathImg, _
LinkToFile:=False, SaveWithDocument:=True, Left:=120, Top:=posPic)
End Sub