先试试这个代码: '* +++++++++++++++++++++++++++++
'* Created By I Love You_Word!@ExcelHome 2005-7-6 21:02:06
'仅测试于System: Windows NT Word: 10.0 Language: 2052
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'* -----------------------------Option Explicit
Sub Example()
Dim i As Paragraph, StartRange As Long, EndRange As Long, MyTableRange As Range
Dim MyRange As Range, TempPar As Paragraph
'定义一个常量为四个制表符
Const RepLable As String = vbTab & vbTab & vbTab & vbTab
'定义一个粗体字常量,其值为"宗地面积量算表"
Const BoldText As String = "宗地面积量算表"
'定义一个表格第一个单元格的常量,其值为"所在图幅号"
Const TableFirstCellText As String = "所在图幅号"
On Error Resume Next '忽略错误
Application.ScreenUpdating = False '关闭屏幕更新
With ThisDocument
For Each i In .Paragraphs '在本文档的段落中循环
'如果段落起始位置小于指定的结束标记位置(即已循环过),则进入下一段落循环
If i.Range.Start < EndRange Then GoTo GN
With i
'定义一个MyRange对象,为去除段落标记的文字区域部分
Set MyRange = ThisDocument.Range(i.Range.Start, i.Range.End - 1)
'去除五个制表位(如果文本中带有五个制表位的话,则替换为"")
MyRange = VBA.Replace(MyRange, RepLable & vbTab, "")
'去除四个制表位(如果文本中带有四个制表位的话,则替换为"")
MyRange = VBA.Replace(MyRange, RepLable, "")
'如果段落文本起始为指定文本时
If VBA.InStr(.Range, BoldText) = 1 Then
'设置其段落格式,粗体,16号字体,段落居中
.Range.Bold = True
.Range.Font.Size = 16
.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
'如果段落文本中包含指定的文本(表格)时
ElseIf VBA.InStr(.Range, TableFirstCellText) = 1 Then
'取得起始位置
StartRange = .Range.Start
'定义一个MyRange对象,为从下一个段落开始到文档末的区域位置
Set MyRange = ThisDocument.Range(i.Next.Range.Start, ThisDocument.Content.End)
'在指定的MyRange对象的段落中循环
For Each TempPar In MyRange.Paragraphs
'如果找到指定的文本,则取得表格末尾段落位置,并退出该循环
If VBA.InStr(TempPar.Range, TableFirstCellText) = 1 Then EndRange = TempPar.Range.End: Exit For
Next
'定义一个RANGE对象
Set MyTableRange = ThisDocument.Range(StartRange, EndRange)
'以制表位为分隔符,转换为表格,并设置为网格型
MyTableRange.ConvertToTable Separator:=wdSeparateByTabs, AutoFitBehavior:=wdAutoFitFixed
MyTableRange.Style = "网格型"
End If
End With
GN: Next
End With
Application.ScreenUpdating = True '恢复屏幕更新
End Sub
'---------------------- 如果你觉得还有什么没有说清楚的,请上传具有代表性的文档。 |