试图确定一些代码,这些代码将根据每个表格中图片的数量自动调整整个文档中表格中的嵌入式图片的大小。一个文档可以包含1到> 10个单独的报告,我的最终目标是使每个单独的报告都适合一页。因此,如果第一份报告中只有一张图片,我会将其调整为75%,如果第二份报告中有两张图片,我会将这两张都调整为〜60%(同时仍将第一份报告的图片保持在75% ), 等等。每个报告都有2个单独的表,并且图片始终位于报告第二个表的第2行中。
现在,我的代码(如图所示)将报告中的所有图片更改为一种特定的尺寸。使用.InlineShapes.Count计数整个文档中的图片总数没有问题,甚至使用ActiveDocument.Tables.Count计数表的总数也没有问题,但是我无法弄清楚如何仅引用其中的图片数量每个表。我曾尝试遍历文档中的所有表格,但是每当我尝试计算表格中图片的数量时,它总是会返回文档中的总数。
Sub resize()
Dim i As Long
With ActiveDocument
For i = 1 To .InlineShapes.Count
With .InlineShapes(i)
.ScaleHeight = 45
.ScaleWidth = 45
End With
Next i
End With
End Sub
答案 0 :(得分:0)
不得不解决一些编译错误,但是下面的代码是最近几个小时一直在工作的代码。它从文档中的第一个表开始,计算该表中的形状数量,然后将形状调整为不同的比例,具体取决于表中形状的数量。它继续循环遍历文档中的所有表,直到完成为止。感谢Tomalak向正确的方向推进。
Sub Dependent_Resize()
Dim t As Table
Dim i As Integer
Dim j As Integer
Dim k As Integer
For i = 1 To ActiveDocument.Tables.Count
Set t = ActiveDocument.Tables(i)
j = t.Range.InlineShapes.Count
If j = 0 Then
ElseIf j = 1 Then
With t.Range.InlineShapes(j)
.ScaleHeight = 75
.ScaleWidth = 75
End With
ElseIf j = 2 Then
For k = 1 To j
With t.Range.InlineShapes(k)
.ScaleHeight = 60
.ScaleWidth = 60
End With
Next k
ElseIf j > 2 Then
For k = 1 To j
With t.Range.InlineShapes(k)
.ScaleHeight = 45
.ScaleWidth = 45
End With
Next k
End If
Next i
End Sub
答案 1 :(得分:0)
使用Option Explicit
可以解决编译错误(Option Explicit应该在任何声明之前位于模块顶部),并且可以简化代码:
Option Explicit
Private Const LARGE_IMG As Long = 75
Private Const MEDIUM_IMG As Long = 60
Private Const SMALL_IMG As Long = 45
Sub dependentResize()
Dim i As Long
Dim scaleTo As Long
Dim ilShape As InlineShape
For i = 1 To ActiveDocument.Tables.Count
With ActiveDocument.Tables(i).Range
Select Case .InlineShapes.Count
Case 1
scaleTo = LARGE_IMG
Case 2
scaleTo = MEDIUM_IMG
Case Else
scaleTo = SMALL_IMG
End Select
For Each ilShape In .InlineShapes
With ilShape
.ScaleHeight = scaleTo
.ScaleWidth = scaleTo
End With
Next
End With
Next i
End Sub