我试图通过代码将图片(公司徽标)添加到标题中。 到目前为止,这个工作正常,直到出现了一些包含标题表的文档,我想保留它。
问题是:我的代码将图片添加到第一个表格单元格中。我想要的是图片位于页面的右上角(页面有一些边距)..但在桌子外面。
如何修改我的代码呢?我想问题是我使用的范围:
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
感谢任何提示!
答案 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
将此属性添加到形状将导致按照需要定位图片,而不再影响表格。
编辑:这似乎并不完全正确。图片仍然被添加到表中..只是不再位于单元格中。如果我删除表格进行测试,图片会自动删除。所以这仍然不是一个理想的解决方案。 我认为仍然使用的范围是问题