如何将图片添加到已包含表格的Word标题中?

时间:2016-01-11 09:09:36

标签: vba ms-word word-vba

我试图通过代码将图片(公司徽标)添加到标题中。 到目前为止,这个工作正常,直到出现了一些包含标题表的文档,我想保留它。

问题是:我的代码将图片添加到第一个表格单元格中。我想要的是图片位于页面的右上角(页面有一些边距)..但在桌子外面。

如何修改我的代码呢?我想问题是我使用的范围:

    Set oSec = ActiveDocument.Sections(1)
    Set oHeader = oSec.Headers(wdHeaderFooterFirstPage)
    Set Rng = oHeader.Range '<<-- Problem here? What to do if there is a table in the header
    Set sh = ActiveDocument.shapes.AddPicture(LogoFile, False, True, 0, 0, , , Rng)
    With sh
        .Height = LogoDimension
        .Width = LogoDimension
        .WrapFormat.Type = wdWrapTopBottom
        .WrapFormat.Side = wdWrapTopBottom
        .WrapFormat.DistanceBottom = MillimetersToPoints(10)
        .RelativeHorizontalPosition = wdRelativeHorizontalPositionRightMarginArea
        .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        .Left = MillimetersToPoints(0.5) - LogoDimension
        .Top = MillimetersToPoints(11.5)
    End With

感谢任何提示!

2 个答案:

答案 0 :(得分:1)

我能够在我的开发机器上测试该场景,并可以重现问题。 Word的页眉/页脚中的形状管理因“柔韧”而臭名昭着 - 这似乎是另外一种。

将图形作为InlineShape对象插入表格下方的段落中,使用ConvertToShape方法,然后立即锁定Shape的锚点,以便移动它不会发生变化锚位置到最近的段落(表格单元格)。

Sub InsertPicInHeaderOutsideTable()
    Dim oSec As word.Section
    Dim oHeader As word.HeaderFooter
    Dim rng As word.Range
    Dim sh As word.Shape, ils As word.InlineShape

    Set oSec = ActiveDocument.Sections(1)
    Set oHeader = oSec.Headers(wdHeaderFooterFirstPage)
    Set rng = oHeader.Range 
    '**** Add the followign four lines to code in your question ****
    rng.Collapse wdCollapseEnd
    Set ils = rng.InlineShapes.AddPicture(LogoFile, False, True, rng)
    Set sh = ils.ConvertToShape
    sh.LockAnchor = True
    With sh
       'and so on...

答案 1 :(得分:0)

经过多次讨论之后,我找到了解决方案:

                    .LayoutInCell = False

将此属性添加到形状将导致按照需要定位图片,而不再影响表格。

编辑:这似乎并不完全正确。图片仍然被添加到表中..只是不再位于单元格中。如果我删除表格进行测试,图片会自动删除。所以这仍然不是一个理想的解决方案。 我认为仍然使用的范围是问题