根据文本字符串调整许多表中的行宽

Resize row widths in many tables based on text string

我是 vba 代码的新手,但在使用基本宏更改 Word 文档中的表格、文本和照片格式方面取得了一些微不足道的成功。我有一个文档,其中包含几个包含文本和照片的表格。这些表都有两列和几行,但有些表的行是 TEXT | TEXT 而有些是 TEXT |照片。

我想创建一个宏来搜索带有单元格的句子中的特定字符串,然后更改行中两个单元格的单元格宽度。我想对所有行和所有表重复此操作。这个想法是让 TEXT | TEXT 行设置有较长的第一列 (15cm) 和较短的第二列 (2.78cm),而 TEXT | PHOTO 行保持原样。文本字符串的一个示例是术语“是”。希望所附照片能更好地解释。

之前

之后

请问有人能帮忙吗?我四处寻找解决方案都没有成功。

这是我到目前为止尝试过的代码,但由于错误提示我有 Next 而没有 For 但我每个都有两个?

子 ColumnWidthText1()

Dim oTbl As Table
Dim oRow As Row
Dim TargetText As String

If Selection.Information(wdWithInTable) = False Then Exit Sub

TargetText = InputBox$("Is the")

For Each oTbl In ActiveDocument.Tables

    For Each oRow In Selection.Tables(1).Rows
        If oRow.Cells(1).range.Text = TargetText & vbCr & Chr(7) Then
                oRow.Cells(1).Width = InchesToPoints(5.2)
                oRow.Cells(2).Width = InchesToPoints(1.8)
    Next oRow
    
Next oTbl

结束子

您想要的可以通过以下代码实现:

Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
For Each Tbl In ActiveDocument.Tables
  With Tbl
    If .Range.InlineShapes.Count > 0 Then
      For r = 1 To .Rows.Count
        If .Cell(r, 2).Range.InlineShapes.Count = 0 Then
          .Rows(c).Cells.DistributeWidth
        End If
      Next
    End If
  End With
Next
Application.ScreenUpdating = True
End Sub

或者:

Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
For Each Tbl In ActiveDocument.Tables
  With Tbl
    If .Range.InlineShapes.Count > 0 Then
      For r = 1 To .Rows.Count
        If .Cell(r, 2).Range.InlineShapes.Count = 0 Then
          .Cell(r, 1).Width = InchesToPoints(5.2)
          .Cell(r, 2).Width = InchesToPoints(1.8)
        End If
      Next
    End If
  End With
Next
Application.ScreenUpdating = True
End Sub