现在,我有一个Word宏,可通过将其复制并粘贴到该位置来将图像移动到特定文本的前面。这工作得很好,但是代价很高。如果我的Word文档中有1000张图像,则运行该宏可能需要30分钟。
必须有更好的方法吧?
我可以在不复制/粘贴整个图像的情况下移动图像锚点吗?
我的最终目标是获取文本+在表中对齐的图像(左文本,右图像),将其从表中拆分出来,但保持左右性质。
具体地说,我正在表中查找图像(第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
注意,为简单起见,我省去了一些安全检查(假设我已经找到有效大小的表,等等。
答案 0 :(得分:1)
仅在目标位于同一页面上时才能移动Shape
。在这种情况下,可以通过更改形状的顶部和左侧属性来移动它。不幸的是(极端),无法通过更改锚点来移动图像。因此,将图像移到另一页(或故事)的唯一方法是使用复制/粘贴。
如果要移动InlineShape
,只需将InlineShape.Range.FormattedText
分配给目标Range
。或者,使用文本扩展范围以包含InlineShape。就Word而言,InlineShape是一个字符。
达到规定的最终目标
获取文字+在表格中对齐的图片(左侧的文字,图片 右),将其从表中打破,但保持其左/右性质
使用右侧带有附加列的表。将图像作为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