gpt4 book ai didi

vba - 移动图像而不复制/粘贴

转载 作者:行者123 更新时间:2023-12-02 17:59:14 27 4
gpt4 key购买 nike

现在我有一个 Word 宏,可以通过将图像复制并粘贴到该位置来将图像移动到特定文本前面。这种方法效果很好,但成本很高。如果我的 Word 文档中有 1,000 张图像,则运行宏可能需要 30 分钟。

一定有更好的方法吧?

我可以移动图像 anchor 而不复制/粘贴整个图像吗?

我的最终目标是获取在表格中对齐的文本+图像(文本向左​​,图像向右),将其从表格中分离出来,但保持左/右性质。

具体来说,我正在表格(第 1 行第 2 列)中查找图像,并希望将它们移动到同一个表格中文本的开头(第 1 列、第 1 行)。这是一个片段:

For Each shape In innerTable.Cell(1, 2).Range.InlineShapes
If shape.Type = wdInlineShapePicture Then
shape.Select
Selection.Cut
innerTable.Range.Paragraphs(1).Range.Characters(1).Paste
'Do it only for the 1st image found:
Exit For
End If

Next

请注意,为了简单起见,我省略了一些安全检查(假设我已经找到了有效大小的表格等。

最佳答案

如果目标位于同一页面上,则只能移动形状。在这种情况下,可以通过更改形状的顶部和左侧属性来移动形状。不幸的是(非常),无法通过更改 anchor 来移动图像。因此,将图像移动到另一个页面(或故事)的唯一方法是使用复制/粘贴。

如果要移动 InlineShape,只需将 InlineShape.Range.FormattedText 分配给目标 Range 即可。或者,使用文本扩展范围以也包括 InlineShape。对于 Word 而言,InlineShape 是一个字符。

实现既定的最终目标

take text + an image that is aligned in a table (text left, image right), break it out of the table, but maintain that left/right nature

使用右侧带有附加列的表格。将图像作为 InlineShape 放入其中。然后可以处理整行,例如如下。

这会在所需位置创建一个新行,并将要移动到新行的行的 Range.FormattedText 复制。删除由此创建的附加行并删除原始行。

Sub MoveRow()
Dim tbl As Word.Table
Dim rwToMove As Word.Row
Dim rwTarget As Word.Row
Dim rwBeforeTarget As Word.Row
Dim posNewRow As Long

posNewRow = 1
Set rwToMove = Selection.Rows(1)
Set tbl = rwToMove.Range.Tables(1)
Set rwBeforeTarget = tbl.Rows(posNewRow)
Set rwTarget = tbl.Range.Rows.Add(rwBeforeTarget) '(posNewRow)
rwTarget.Range.FormattedText = rwToMove.Range.FormattedText
tbl.Rows(posNewRow + 1).Delete
rwToMove.Delete
End Sub

关于vba - 移动图像而不复制/粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55417926/

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