形状图片会到达意外位置,即使.top和.left值正确-Word VBA

时间:2019-06-20 19:33:01

标签: vba image ms-word

问题是,我正在创建一个新的形状图片来替换以前的图片。 但是,即使新形状属性“上”和“左”与上一张图片完全一样,新形状也会错位。这发生在标题形状上。 我相信我无法在VBA手表上找到某种隐藏属性。

我正在添加以下代码(简化版):

GridSearchCV

voilá,它创建了对象shp2,删除了shp2del ..,这是一个小问题,在某些文档中,它并没有定位。

我尝试了很多事情,在创建后重新定义了shp2.top和shp2.left, 寻找相对位置属性,锚对象属性,与要删除的形状和新形状进行比较,除非我(最有可能)缺少一个属性,否则一切似乎都是相同的。

我还尝试创建一个宏,并查看将新形状更改为位置的代码,但是不幸的是,创建宏字时并不能很好地处理图片。

我发现的唯一提示是这个,但是要以编程方式更改它,我不知道如何。

old shape on left, new shape on right 更新:

在m4o_tim回答后,单词显示的选项更加准确,但最终文档上的距离仍然不正确

old shape on left, new one on right

我也对锁定锚感到好奇,并允许重叠,但这肯定隐藏在shp2.anchor中,我会尝试一下。

关于绝对位置,我找不到可以设置的属性。 感谢您的帮助m4o_tim,还有其他人可以帮助您吗?

更新2: 最后,它的工作原理基本上是在设置后重新定义顶部和左侧位置

For i = ActiveDocument.Sections(1).Headers(1).Shapes.count To 1 Step -1

'shape to delete:
    set shp2del = ActiveDocument.Sections(1).Headers(1).Shapes(i)
'shape to add
Set shp2 = ActiveDocument.Sections(1).Headers(1).Shapes.AddPicture(replace_path, False, True, shp2del.Left, shp2del.Top, shp2del.width, shp2del.height)

shp2del.delete

next i

此后,它运行良好。谢谢m4o_tim

更新3: 我很幸运地意识到这一点只适用于一个部分。原因是锚位置。

如果我比较 shp2del.Anchor.Information(wdVerticalPositionRelativeToPage) 与 shp2.Anchor.Information(wdVerticalPositionRelativeToPage)

我会得到不同的值。我将对此提出一个新问题。谢谢大家。

1 个答案:

答案 0 :(得分:2)

添加新形状时,您没有指定相对位置,因此Word会相对于列和段落应用其默认位置。

当您发现对象模型中不熟悉的内容时,请尝试使用对象浏览器和联机帮助文档。

您的代码应如下所示:

编辑:旧图片中包含的设置锚点

'shape to add
Set shp2 = ActiveDocument.Sections(1).Headers(1).Shapes.AddPicture(replace_path, False, True, , , shp2del.width, shp2del.height, shp2del.Anchor)
With shp2
    .WrapFormat.Type = shp2del.WrapFormat.Type
    .RelativeHorizontalPosition = shp2del.RelativeHorizontalPosition
    .Left = shp2del.Left
    .RelativeVerticalPosition = shp2del.RelativeVerticalPosition
    .Top = shp2del.Top
End With