【问题标题】:Adjusting row height if tables in word using vba如果使用vba在word中的表格调整行高
【发布时间】:2019-12-15 15:41:32
【问题描述】:

我有一个基于两个不同表格的两个页面的重复模板。我正在研究一个宏来调整整个文档中这些表格的行高,以使行高相同。有时表格会留在页面上,有时它会不断溢出到新页面上。

我一直在尝试几种不同的方法,下面是我最接近让它工作的方法。下面通过查看文档的位置来获取实际的行高。我遇到的问题是表格是跨页的,因此当它到达下一页的一行时会一直显示错误。错误是“测量值必须在 0 pt 和 1584 pt 之间。”

这是我目前使用的代码:

A = 1
B = 2

While B <= ActiveDocument.Tables.Count

Set T1 = ActiveDocument.Tables(A)
Set T2 = ActiveDocument.Tables(B)

Set R1 = T1.Rows
Set R2 = T2.Rows

Set C1 = T1.Columns
Set C2 = T2.Columns

For i = 1 To R1.Count()
   If i = R1.Count() Then
   Else
      H1 = T1.Rows(i + 1).Range.Information(wdVerticalPositionRelativeToPage) _
    - T1.Rows(i).Range.Information(wdVerticalPositionRelativeToPage)
      H2 = T2.Rows(i + 1).Range.Information(wdVerticalPositionRelativeToPage) _
    - T2.Rows(i).Range.Information(wdVerticalPositionRelativeToPage)

      If H1 > 0 Or H1 < 1584 Or H2 > 0 Or H2 < 1584 Then
         If H1 > H2 Then
            R2(i).Height = H1
         Else
            R1(i).Height = H2
         End If
      End If
   End If

Next

A = A + 1
B = B + 2
Wend

我也尝试使用以下设置高度,在这种情况下不起作用,因为它只获取行的默认高度而不是实际高度。

H1 = R1(i).Height
H2 = R2(i).Height

提前感谢您的帮助。

【问题讨论】:

  • 这真是令人困惑。你能用正确的缩进正确格式化代码吗?
  • 只有当行 content 跨页时才会出现问题是否正确?如果中断在完整行的末尾,则不会出现问题?在这种情况下,在代码期间禁止该行为:R1.AllowBreakAcrossPages = false : R2.AllowBreakAcrossPages = false。代码运行后可以切换回来...
  • 没错 Cindy,只有当行内容跨页时才会发生这种情况。那么我应该在 foreach 中启动它,然后在循环之后将其切换回来吗?

标签: vba ms-word row-height


【解决方案1】:

感谢所有帮助过的人。我最终通过使用以下代码解决了这个问题,并使文档页面变得非常长。不理想,但有效。

Sub rowHeight()
A = 2
B = 4

While B <= ActiveDocument.Tables.Count

Set T1 = ActiveDocument.Tables(A)
Set T2 = ActiveDocument.Tables(B)

Set r1 = T1.Rows
Set r2 = T2.Rows

Set C1 = T1.Columns
Set C2 = T2.Columns

On Error Resume Next
For i = 1 To r1.Count()

If i = r1.Count() Then
Else
H1 = T1.Rows(i + 1).Range.Information(wdVerticalPositionRelativeToPage) _
    - T1.Rows(i).Range.Information(wdVerticalPositionRelativeToPage)
H2 = T2.Rows(i + 1).Range.Information(wdVerticalPositionRelativeToPage) _
    - T2.Rows(i).Range.Information(wdVerticalPositionRelativeToPage)
'H1 = R1(i).Height
'H2 = R2(i).Height
If H1 > 0 & H1 < 1584 & H2 > 0 & H2 < 1584 Then
If H1 > H2 Then
r2(i).Height = H1
Else
r1(i).Height = H2
End If
End If
End If

Next

A = A + 4
B = B + 4
Wend

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多