gpt4 book ai didi

vba - 即使使用正确的 .top 和 .left 值,形状图片也会出现意外位置 - Word VBA

转载 作者:行者123 更新时间:2023-12-04 15:43:54 25 4
gpt4 key购买 nike

问题是,我正在创建一个新的形状图片来替换以前的图片。
然而,即使新的形状属性 Top 和 Left 与之前的图片完全相同,新形状也会错位。这发生在标题形状上。
我相信有一些我无法在 VBA watch 上找到的隐藏属性。

我添加的代码是这样的(简化版):

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

瞧,它创建了对象 shp2,删除了 shp2del.. 有一个小问题,在某些文档中,它没有保持原位。

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

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

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

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

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

old shape on left, new one on right

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

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

更新 2:
最后它的工作,基本上需要做的是在设置后重新定义顶部和左侧位置
                        With newshp
.WrapFormat.Type = oldshp.WrapFormat.Type
.RelativeHorizontalPosition = oldshp.RelativeHorizontalPosition
.LeftRelative = oldshp.LeftRelative
.RelativeVerticalPosition = oldshp.RelativeVerticalPosition
.TopRelative = oldshp.TopRelative
.Top = oldshp.Top
.Left = oldshp.Left
.LockAnchor = oldshp.LockAnchor
End With

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

更新 3:
我意识到这幸运地只在一个部分起作用。原因是 anchor 位置。

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

shp2.Anchor.Information(wdVerticalPositionRelativeToPage)

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

最佳答案

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

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

你的代码应该是这样的:

编辑:包括旧图像的设置 anchor

'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

关于vba - 即使使用正确的 .top 和 .left 值,形状图片也会出现意外位置 - Word VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56692752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com