2015-08-28 2 views
1

В моем первом сообщении так жаль каких-либо ошибок.Форма доступа по имени в заголовке

Я пытаюсь заменить изображение в заголовке документа. Это будет сделано несколько тысяч раз.

Эта строка кода:

Set shp = ActiveDocument.Sections(1).Headers.Shapes(strPic) 

Причины:

Compile error: Method or data member not found

и

Set shp = ActiveDocument.Shapes("strPic") 

Причины:

Run-time error '-2147024809(80070057): The item with the specified name wasn't found.

Я написал несколькими способами и не могу заставить его назначить shp. Я чувствую, что это очень простая проблема с тем, как я обращаюсь к заголовку, или, может быть, весь этот суб-код просто ошибается. Линию strPic, прежде чем получить имя формы.

Sub imagerepl() 

With Selection 
     ' \\ If we selected a InlineShape then convert to Shape 
     If .Type = wdSelectionInlineShape Then 
      .InlineShapes(1).ConvertToShape 
     End If 
    End With 

strPic = Selection.ShapeRange.Name 
Set shp = ActiveDocument.Sections(1).Headers.Shapes(strPic) 

'Capture properties of exisitng picture such as location and size 
With shp 
    t = .Top 
    l = .Left 
    h = .Height 
    w = .Width 
End With 

ActiveDocument.StoryRanges(wdPrimaryHeaderStory).ShapeRange(strPic).Delete 


Set shp = ActiveDocument.Shapes.AddPicture("C:\Users\tk\Pictures\DFHlogo.png",  msoFalse, msoTrue, l, t, w, h) 
shp.Name = strPic 
shp.ScaleHeight Factor:=1, RelativeToOriginalSize:=msoTrue 
shp.ScaleWidth Factor:=1, RelativeToOriginalSize:=msoTrue 


End Sub 
+0

Это зафиксировал его: Set л.с = ActiveDocument.StoryRanges (wdPrimaryHeaderStory) .ShapeRange (strPic) –

ответ

1

Вы можете получить доступ к изображению заголовка через коллекцию Range.InlineShapes. Например, следующая процедура удалит первое изображение в коллекции и затем добавит новое изображение в заголовок.

Dim sh As InlineShape 

With ThisDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range 

    ' Get the first (possibly only, for you) image in the header... 
    Set sh = .InlineShapes(1) 

    ' Delete it... 
    sh.Delete 

    ' Add a new image to the header... 
    Set sh = .InlineShapes.AddPicture("c:\path\to\my.jpg") 

    ' Set its properties... 
    sh.Width = 100 
    sh.Height = 100 
    ... 

End With 
+0

Огромное спасибо эту работу большой. Я начал с встроенных форм и не мог заставить его работать. даже с моим исправленным, он добавляет изображение в тело. Не говоря уже о том, что ваш гораздо эффективнее, не превращая встроенную форму. –

+0

Happy to help. Если вы нашли ответ полезным, пожалуйста, подумайте над тем, чтобы [продолжить и/или принять] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). Благодарю. – Bond

+0

Я вернулся обратно, чтобы у меня было больше репутации –

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