ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1067|回复: 12

[求助] 如何把word文档中除表格外的全部段落按字符量插入自动编号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-5 11:32 | 显示全部楼层 |阅读模式
Sub 自动编辑附注()
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
       .Text = "^p^p"
       .Replacement.Text = "^p"
       .Forward = True
       .Wrap = wdFindContinue
       .Format = False
        .MatchCase = False
       .MatchWholeWord = False
       .MatchByte = True
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
   End With
   Selection.Find.Execute Replace:=wdReplaceAll
   Selection.Find.Execute Replace:=wdReplaceAll
   Selection.Find.Execute Replace:=wdReplaceAll
   Selection.Find.Execute Replace:=wdReplaceAll
   Selection.Find.Execute Replace:=wdReplaceAll
   Selection.Find.Execute Replace:=wdReplaceAll
   Selection.WholeStory
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   ActiveDocument.Content.Find.Execute FindText:=" ",ReplaceWith:="", Replace:=wdReplaceAll
   Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Fields.Unlink
    Dim i%
   Dim aTable As Table
   Application.ScreenUpdating = False
   For Each aTable In ActiveDocument.Tables
       With aTable.Cell(1, 1).Range
           Do
                .Expand wdRow
                If .Text Like "*[!"& Chr(7) & Chr(13) & "  ]*" = False Then
                    .Rows.Delete
                    i = i + 1
                Else
                     .Move wdCell
                End If
           Loop Until .End = aTable.Range.End
       End With
   Next
   Application.Browser.Target = wdBrowseTable
   For i = 1 To ActiveDocument.Tables.Count 'For
   With Selection
   ActiveDocument.Tables.Item(i).Select
       With .Shading
           .Texture = wdTextureNone
           .ForegroundPatternColor = wdColorAutomatic
            .BackgroundPatternColor = -603914241
       End With
       With .Borders(wdBorderTop)
           .LineStyle = wdLineStyleSingle
           .LineWidth = wdLineWidth150pt
           .Color = wdColorAutomatic
       End With
       With .Borders(wdBorderBottom)
           .LineStyle = wdLineStyleSingle
           .LineWidth = wdLineWidth150pt
           .Color = wdColorAutomatic
       End With
       With .Borders(wdBorderHorizontal)
           .LineStyle = wdLineStyleSingle
           .LineWidth = wdLineWidth050pt
           .Color = wdColorAutomatic
       End With
       With .Borders(wdBorderVertical)
           .LineStyle = wdLineStyleSingle
           .LineWidth = wdLineWidth050pt
           .Color = wdColorAutomatic
       End With
       .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
       .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
       .Borders.Shadow = False
   End With
   With Options
       .DefaultBorderLineStyle = wdLineStyleSingle
       .DefaultBorderLineWidth = wdLineWidth050pt
       .DefaultBorderColor = wdColorAutomatic
   End With
   
   Next i
   
   Dim p As Paragraph
   ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
   For Each p In ActiveDocument.Paragraphs
       If p.Range.Information(wdWithInTable) = False Then
           p.Range.Editors.Add wdEditorEveryone
       End If
   Next
   ActiveDocument.SelectAllEditableRanges wdEditorEveryone
   ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
   Selection.Font.Color = wdColorRed
End Sub

附件.rar

48.49 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2023-5-5 16:16 | 显示全部楼层
晕,这和字符数量有啥关系啊,有的一级标题比二级标题还长呢:D

TA的精华主题

TA的得分主题

发表于 2023-5-5 16:19 | 显示全部楼层
你规范一下:二级标题最后以":"结尾应该还是可以处理的

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-5 17:15 | 显示全部楼层
我不懂编这些代码的,是在网上找后多个代码串接成的,各位大神,帮编写下代码吧,谢谢。

TA的精华主题

TA的得分主题

发表于 2023-5-6 10:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub 添加编号()
  2. '
  3. ' 添加编号(删除空段落、规范表格、添加自动编号)
  4. '
  5.     Application.ScreenUpdating = False

  6.     Dim myTB As Table, myPG As Paragraph
  7.     Dim isL1 As Boolean, L%, s$, defSpace$

  8.     ' 设置一级自动编号
  9.     With ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1)
  10.         .NumberFormat = "(%1)"
  11.         .NumberStyle = wdListNumberStyleSimpChinNum1
  12.         .NumberPosition = 0
  13.         .TrailingCharacter = wdTrailingNone
  14.         .Alignment = wdListLevelAlignLeft
  15.         .ResetOnHigher = 0
  16.         .StartAt = 1
  17.         With .Font
  18.             .Name = "宋体"
  19.             .Bold = False
  20.             .Size = 11
  21.         End With
  22.         .LinkedStyle = ""
  23.     End With

  24.     With ActiveDocument
  25.         ' 删除空段落
  26.         With .Range.Find
  27.             .ClearFormatting
  28.             .Replacement.ClearFormatting
  29.             .Text = "^13{2,}"
  30.             .Replacement.Text = "^13"
  31.             .Forward = True        ' 向下查找:是
  32.             .Wrap = wdFindContinue
  33.             .MatchWildcards = True
  34.             .Format = False        ' 格式:否
  35.             .MatchCase = False        ' 区分大小写:否
  36.             .MatchWholeWord = False        ' 全字匹配:否
  37.             .MatchByte = False        ' 是否区分全/半角:否
  38.             .Execute Replace:=wdReplaceAll
  39.         End With

  40.         defSpace = "  " & Chr(7) & Chr(9) & Chr(11) & Chr(13) & Chr(160)
  41.         isL1 = True: L = 0
  42.         With .Range(0, 0)
  43.             Do
  44.                 If .Information(wdWithInTable) Then
  45.                     isL1 = True
  46.                     Set myTB = .Tables(1)
  47.                     With myTB
  48.                         ' 设置表格框线
  49.                         .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
  50.                         .Borders(wdBorderRight).LineStyle = wdLineStyleNon
  51.                         .Borders(wdBorderTop).LineStyle = wdLineStyleSingle
  52.                         .Borders(wdBorderTop).LineWidth = wdLineWidth150pt
  53.                         .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
  54.                         .Borders(wdBorderBottom).LineWidth = wdLineWidth150pt
  55.                         .Borders.InsideLineStyle = wdLineStyleSingle
  56.                         .Borders.InsideLineWidth = wdLineWidth075pt
  57.                         ' 删除表格空行
  58.                         With .Cell(1, 1).Range
  59.                             Do
  60.                                 .Expand wdRow
  61.                                 If .Text Like "*[!" & defSpace & "]*" Then
  62.                                     .Move wdCell
  63.                                 Else
  64.                                     .Rows.Delete
  65.                                 End If
  66.                             Loop Until .End = myTB.Range.End
  67.                         End With
  68.                     End With
  69.                     .Expand wdTable: .Move
  70.                 Else
  71.                     ' 添加编号
  72.                     Set myPG = .Paragraphs(1)
  73.                     With myPG.Range
  74.                         s = Trim(Left(.Text, Len(.Text) - 1))
  75.                         If Len(s) > 0 Then
  76.                             If .Characters(1) Like "[ 123456789]" Then .Characters(1).Delete
  77.                             If Not isL1 Or Right(s, 1) Like "[::]" Or s Like "*明细前五名" Then        ' 添加二级计数编号(不具有通用性)
  78.                                 isL1 = True: L = L + 1: .InsertBefore L
  79.                             Else ' 添加一级编号(自动编号)
  80.                                 isL1 = False: L = 0
  81.                                 .ListFormat.ApplyListTemplateWithLevel _
  82.                                         ListTemplate:=ListGalleries(wdNumberGallery).ListTemplates(1), _
  83.                                         ContinuePreviousList:=True, _
  84.                                         ApplyTo:=wdListApplyToWholeList, _
  85.                                         DefaultListBehavior:=wdWord10ListBehavior
  86.                             End If
  87.                             With .ParagraphFormat
  88.                                 .LeftIndent = 0
  89.                                 .CharacterUnitFirstLineIndent = 2
  90.                             End With
  91.                         End If
  92.                     End With
  93.                     .Move wdParagraph
  94.                 End If
  95.             Loop Until .End = ActiveDocument.Content.End - 1
  96.         End With
  97.     End With

  98.     Set myPG = Nothing
  99.     Set myTB = Nothing

  100.     Application.ScreenUpdating = True

  101. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-6 10:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 batmanbbs 于 2023-5-6 10:18 编辑

该代码完全是根据你提供的文档编写的,因此不具有通用性,特别是二级编号采用的是你文档中的计数编号(非自动编号)。另外,二级编号对应的二级标题除了你文档中的内容外,也不具有扩展性。建议你最好规范一下二级标题(比如我上面提到的段落结尾都是":"),才能使代码应用的更广泛一些。

我没有添加颜色,如果需要可以自己修改一下。

BTW:你的要求可不仅仅是你标题所述,相关要求其实比较复杂,涉及段落、表格、自动编号等处理。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-6 11:22 | 显示全部楼层
本帖最后由 不空善成 于 2023-5-6 11:39 编辑
batmanbbs 发表于 2023-5-6 10:14
该代码完全是根据你提供的文档编写的,因此不具有通用性,特别是二级编号采用的是你文档中的计数编号(非自 ...

我上面的代码,只运行到全选除表格的段落,插入自动编号要手动添加修改,二级段落结尾可以全部是“:”,自动编号代码如何修改添加。

TA的精华主题

TA的得分主题

发表于 2023-5-6 13:54 | 显示全部楼层
不空善成 发表于 2023-5-6 11:22
我上面的代码,只运行到全选除表格的段落,插入自动编号要手动添加修改,二级段落结尾可以全部是“:”, ...

没有听明白,代码执行错误了吗?截图看一下

TA的精华主题

TA的得分主题

发表于 2023-5-6 14:54 | 显示全部楼层
  1. Sub 添加编号()
  2. '
  3. ' 添加编号(删除空段落、规范表格、添加自动编号)
  4. '
  5.     Application.ScreenUpdating = False

  6.     Dim myTB As Table, myPG As Paragraph
  7.     Dim L%, s$, defSpace$

  8.     ' 设置一级自动编号
  9.     With ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1)
  10.         .NumberFormat = "(%1)"
  11.         .NumberStyle = wdListNumberStyleSimpChinNum1
  12.         .NumberPosition = 0
  13.         .TrailingCharacter = wdTrailingNone
  14.         .Alignment = wdListLevelAlignLeft
  15.         .ResetOnHigher = 0
  16.         .StartAt = 1
  17.         With .Font
  18.             .Name = "宋体"
  19.             .Bold = False
  20.             .Size = 11
  21.         End With
  22.         .LinkedStyle = ""
  23.     End With
  24.     ' 设置二级自动编号
  25.     With ListGalleries(wdNumberGallery).ListTemplates(2).ListLevels(1)
  26.         .NumberFormat = "%1、"
  27.         .NumberStyle = wdListNumberStyleArabic
  28.         .NumberPosition = 0
  29.         .TrailingCharacter = wdTrailingNone
  30.         .Alignment = wdListLevelAlignLeft
  31.         .ResetOnHigher = 0
  32.         .StartAt = 1
  33.         With .Font
  34.             .Name = "宋体"
  35.             .Bold = False
  36.             .Size = 11
  37.         End With
  38.         .LinkedStyle = ""
  39.     End With

  40.     With ActiveDocument
  41.         ' 删除空段落
  42.         With .Range.Find
  43.             .ClearFormatting
  44.             .Replacement.ClearFormatting
  45.             .Text = "^13{2,}"
  46.             .Replacement.Text = "^13"
  47.             .Forward = True
  48.             .Wrap = wdFindContinue
  49.             .MatchWildcards = True
  50.             .Format = False
  51.             .MatchCase = False
  52.             .MatchWholeWord = False
  53.             .MatchByte = False
  54.             .Execute Replace:=wdReplaceAll
  55.         End With

  56.         defSpace = "  " & Chr(7) & Chr(9) & Chr(11) & Chr(13) & Chr(160)
  57.         L = 0
  58.         With .Range(0, 0)
  59.             Do
  60.                 If .Information(wdWithInTable) Then
  61.                     Set myTB = .Tables(1)
  62.                     With myTB
  63.                         ' 设置表格框线
  64.                         .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
  65.                         .Borders(wdBorderRight).LineStyle = wdLineStyleNon
  66.                         .Borders(wdBorderTop).LineStyle = wdLineStyleSingle
  67.                         .Borders(wdBorderTop).LineWidth = wdLineWidth150pt
  68.                         .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
  69.                         .Borders(wdBorderBottom).LineWidth = wdLineWidth150pt
  70.                         .Borders.InsideLineStyle = wdLineStyleSingle
  71.                         .Borders.InsideLineWidth = wdLineWidth075pt
  72.                         ' 删除表格空行
  73.                         With .Cell(1, 1).Range
  74.                             Do
  75.                                 .Expand wdRow
  76.                                 If .Text Like "*[!" & defSpace & "]*" Then
  77.                                     .Move wdCell
  78.                                 Else
  79.                                     .Rows.Delete
  80.                                 End If
  81.                             Loop Until .End = myTB.Range.End
  82.                         End With
  83.                     End With
  84.                     .Expand wdTable: .Move
  85.                 Else
  86.                     ' 添加编号
  87.                     Set myPG = .Paragraphs(1)
  88.                     With myPG.Range
  89.                         s = Trim(Left(.Text, Len(.Text) - 1))
  90.                         If Len(s) > 0 Then
  91.                             If .Characters(1) = " " Then .Characters(1).Delete
  92.                             If .Characters(1) = "、" Then .Characters(1).Delete
  93.                             If Right(s, 1) Like "[::]" Then        ' 添加二级自动编号
  94.                                 L = L + 1
  95.                                 .ListFormat.ApplyListTemplateWithLevel _
  96.                                         ListTemplate:=ListGalleries(wdNumberGallery).ListTemplates(2), _
  97.                                         ContinuePreviousList:=(L <> 1), _
  98.                                         ApplyTo:=wdListApplyToWholeList, _
  99.                                         DefaultListBehavior:=wdWord10ListBehavior
  100.                             Else ' 添加一级编号(自动编号)
  101.                                 L = 0
  102.                                 .ListFormat.ApplyListTemplateWithLevel _
  103.                                         ListTemplate:=ListGalleries(wdNumberGallery).ListTemplates(1), _
  104.                                         ContinuePreviousList:=True, _
  105.                                         ApplyTo:=wdListApplyToWholeList, _
  106.                                         DefaultListBehavior:=wdWord10ListBehavior
  107.                             End If
  108.                             With .ParagraphFormat
  109.                                 .LeftIndent = 0
  110.                                 .CharacterUnitFirstLineIndent = 2
  111.                             End With
  112.                         End If
  113.                     End With
  114.                     .Move wdParagraph
  115.                 End If
  116.             Loop Until .End = ActiveDocument.Content.End - 1
  117.         End With
  118.     End With

  119.     Set myPG = Nothing
  120.     Set myTB = Nothing

  121.     Application.ScreenUpdating = True

  122. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-6 14:56 | 显示全部楼层
如二级标题可以确定以":"结尾,可以使用修改后的代码(二级编号也是自动编号)
PS:你可以修改第97句代码,来适应你的二级标题特征。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-27 04:19 , Processed in 0.036772 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表