根据文本字符串调整许多表中的行宽
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
我是 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