Как разместить изображение / логотип в шапке с уже имеющимся содержимым и без него? - PullRequest
0 голосов
/ 20 сентября 2018

В настоящее время я работаю в рекрутинговой фирме и пытаюсь написать программу, которая будет размещать логотип моей компании в верхнем левом углу резюме.

Некоторые резюме имеют содержимое в заголовке, а некоторые нет.Я сделал два заявления if, чтобы учесть оба обстоятельства, но по какой-то странной причине это не сработало.

Это мой код ниже:

Dim i As Long
Dim FooterText As String
Dim Logo As Shape
Dim HeaderExists As Section

'Header:

ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

Set HeaderExists = ActiveDocument.Sections(1)

Set Logo = Selection.InlineShapes.AddPicture(FileName:="My company logo", _
LinkToFile:=False, SaveWithDocument:=True).ConvertToShape

If HeaderExists.Headers(wdHeaderFooterFirstPage).Exists = False Then
    With Logo
        .WrapFormat.Type = wdWrapBehind
        .Left = -67
        .Top = -30
        .Width = 107
        .Height = 48
    End With
End If

If HeaderExists.Headers(wdHeaderFooterFirstPage).Exists = True Then
    With Logo
        .WrapFormat.Type = wdWrapBehind
        .Left = 5
        .Top = 5
        .Width = 107
        .Height = 48
    End With
End If

По праву, кодработает только для резюме с содержимым в заголовке.По какой-то причине, когда я изменяю wdHeaderFooterPrimary на wdFooterFirstPage, он переворачивается и работает только для возобновления БЕЗ содержимого в заголовке.

1 Ответ

0 голосов
/ 21 сентября 2018

Если вы не хотите, чтобы логотип появлялся на каждой странице, вам необходимо применить макет «другая первая страница» к документам, у которых его еще нет.Затем вам нужно будет решить, что делать с документами, которые не имеют такого макета, но имеют заголовок, поскольку существующий заголовок теперь будет отображаться только на 2-й и последующих страницах (если имеется более одной страницы).В следующем коде я применил макет «другая первая страница», который устраняет любые опасения по поводу того, что происходит в вашем проблемном сценарии, и предполагал, что заголовок и логотип должны появляться только на первой странице:

Sub Demo()
Application.ScreenUpdating = False
Dim Sctn As Section, Rng As Range, Shp As Shape
Set Sctn = ActiveDocument.Sections.First
With Sctn
  If .PageSetup.DifferentFirstPageHeaderFooter = False Then
    'Apply a Different First Page layout
    .PageSetup.DifferentFirstPageHeaderFooter = True
    Set Rng = .Headers(wdHeaderFooterFirstPage).Range
    With Rng
      'Replicate the original Primary header
      If Sctn.Headers(wdHeaderFooterPrimary).Range.Text <> "" Then
        .FormattedText = Sctn.Headers(wdHeaderFooterPrimary).Range.FormattedText
        .Characters.Last.Delete
      End If
    End With
    'Delete the original Primary header
    Sctn.Headers(wdHeaderFooterPrimary).Range.Text = vbNullString
  End If
  With Rng
    .Collapse wdCollapseStart
    'Add the logo
    Set Shp = .InlineShapes.AddPicture(FileName:="My company logo", _
      LinkToFile:=False, SaveWithDocument:=True).ConvertToShape
    'Adjust the logo's formatting
    With Shp
      .WrapFormat.Type = wdWrapBehind
      .Left = 5
      .Top = 5
      .LockAspectRatio = True
      .Width = 107
    End With
  End With
End With
Application.ScreenUpdating = True
End Sub

Если документ состоит из нескольких разделов, вам также необходимо подумать, что делать с макетами и заголовками страниц.

...