【发布时间】:2021-05-30 07:48:26
【问题描述】:
这是我第一次在 VBA 中编写宏。我的目标是编写一个 VBA 宏,它将自动对齐(分布)Word 文档中的所有图像(彼此相邻),并在每张图片的每一面。如果没有足够的空间容纳另一张图片,我需要它转到下一行(就在之前的图片下方)并继续水平对齐图片。
我在互联网上搜索了很多,但我没有找到实现此目的的方法......
注意:我的宏已经包含使所有图像具有相同高度(同时保持相同纵横比)的代码,所以我认为尺寸应该不是问题...
我尝试使用此链接中的水平对齐代码:https://www.excelcampus.com/vba/align-space-distribute-shapes/
但我得到了以下结果: 边距很奇怪,形状无限对齐,而不是进入下一行...
我的代码:
Dim lCnt As Long
Dim dTop As Double
Dim dLeft As Double
Dim dWidth As Double
Const dSPACE As Double = 8 'Set space between shapes in points
lCnt = 1
Dim image As Shape
If ActiveDocument.Shapes.Count > 0 Then
For Each image In ActiveDocument.Shapes
With image
.WrapFormat.Type = wdWrapSquare
.LockAspectRatio = msoTrue
.Height = InchesToPoints(3)
If lCnt > 1 Then
.Top = dTop
.Left = dLeft + dWidth + dSPACE
End If
dTop = .Top
dLeft = .Left
dWidth = .Width
End With
lCnt = lCnt + 1
Next
End If
End Sub
提前致谢!
【问题讨论】:
-
你自己尝试了什么?
-
我建议您使用表格并将表格属性设置为不自动调整大小。为了视觉布局的兴趣,您可以使行具有不同数量的单元格,就像您的示例一样。关闭表格边框。我建议使用表格,否则,您的代码将必须过于复杂,以允许不同大小的图片和剩余的页面宽度。
-
@FaneDuru 我已经更新了我的问题,所以现在它包含了我的代码和更多信息......
-
使用表格,其中 1 列的宽度与您指示的页面宽度相同,并且每行的高度相同。您的代码需要担心的只是将图片并排放置在一个单元格中,其余的由表格处理。你。
-
您可以使用您的实际代码创建两个新变量
totalWidth和totalHeight。您必须将totalWidth与可打印页面进行比较,并使totalWidth为零,Top等于totalHeight加上dSpace。当然,您之前必须计算理论totalWidth,如果超过页面宽度,则使用新的图片行。
标签: vba image ms-word alignment