ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于制度自动编号问题(第一条、第二条)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-3 11:34 | 显示全部楼层 |阅读模式
公司最近在组织大量制度的修订,其中就涉及到将以前制度格式的序号,改为第一条、第二条这种格式。
改一遍还好,如果前面要插入一条,后面的全部都要修改。
想研究个自动修改的VBA,检查每段前7个字(想了下,最多三位数的条,第一百九十九条,7个字)包含“第”“条”,取得“第”“条”中间的数字(这个是大写),然后查找下一段前七个字包括“第”“条”的,将“第”“条”中间的字符,改为取的上一个“第”“条”中间的数字+1。然后一直往下执行。
对VBA基本不太会,看能麻烦各位前辈有空指导下以下几点么?

1、从第一段开始,判断每段前七个字符是否包含“第”“条”。不能取全段包含,怕遇到段落中有“按第几条处理”的情况。
2、如果包含“第”“条”,则提取“第”“条”中间的数字,但是这是大写的,涉及到转换为小写的问题。
3、查找下一段前七个字符包含“第”“条”的,然后将“第”“条”中间的字符,改为提取的数字+1转换为大写的字符。
4、查找下一段,循环执行至结尾。

不胜感激!

修改制度编号.rar

17.17 KB, 下载次数: 33

TA的精华主题

TA的得分主题

发表于 2020-3-3 12:11 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可以了解下自动编号域。seq+Chinesenum3。可呈现大写。具体百度下,或论坛搜索下。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-3 15:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
给你一个 413191246se 老师的代码,运成试试,参考一下。
  1. Sub test()
  2.     Dim myRange As Range
  3.     If Selection.Type = wdSelectionIP Then Selection.WholeStory
  4.     Set myRange = Selection.Range
  5.     myRange.Find.Execute findtext:=" ", replacewith:=":", Replace:=wdReplaceAll
  6.     myRange.Find.Execute findtext:="^w", replacewith:="", Replace:=wdReplaceAll
  7.     Dim v As Long, i As Long
  8.     Selection.HomeKey Unit:=wdStory
  9.     Selection.Find.ClearFormatting
  10.     Do While Selection.Find.Execute(findtext:="第", Forward:=True)
  11.         Do  '外层循环运行。
  12.             Selection.MoveEnd Unit:=wdCharacter, Count:=1
  13.         Loop Until Selection Like "*[!一二三四五六七八九十百零]"
  14.         If Selection Like "*条" Then
  15.             Selection.MoveStart Unit:=wdCharacter, Count:=1
  16.             Selection.MoveEnd Unit:=wdCharacter, Count:=-1
  17.             Selection.Font.Color = wdColorRed
  18.             If Selection Like "十[一二三四五六七八九]" Then
  19.                 Selection.Characters(1) = "1"
  20.                 Selection.MoveRight Unit:=wdCharacter, Count:=1
  21.                 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
  22.                 GoTo Sec
  23.             ElseIf Selection Like "[一二三四五六七八九][十百]" Then
  24.                 If Selection Like "*十" Then Selection.Characters(2) = "0" Else Selection.Characters(2) = "00"
  25.                 Selection.MoveLeft Unit:=wdCharacter, Count:=1
  26.                 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
  27.                 GoTo Sec
  28.             ElseIf Selection Like "???十" Then
  29.                 Selection.Characters.Last = "0"
  30.             End If
  31.             Selection = Replace(Selection, "百", "")
  32.             If Len(Selection) >= 3 Then Selection = Replace(Selection, "十", "")
  33.             v = Len(Selection)
  34.             Selection.MoveLeft Unit:=wdCharacter, Count:=1
  35.             Do
  36.                 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
  37. Sec:
  38.                 If Selection = "一" Then
  39.                     Selection = "2"
  40.                 ElseIf Selection = "二" Then
  41.                     Selection = "3"
  42.                 ElseIf Selection = "三" Then
  43.                     Selection = "4"
  44.                 ElseIf Selection = "四" Then
  45.                     Selection = "5"
  46.                 ElseIf Selection = "五" Then
  47.                     Selection = "6"
  48.                 ElseIf Selection = "六" Then
  49.                     Selection = "7"
  50.                 ElseIf Selection = "七" Then
  51.                     Selection = "8"
  52.                 ElseIf Selection = "八" Then
  53.                     Selection = "9"
  54.                 ElseIf Selection = "九" Then
  55.                     Selection = "10"
  56.                 ElseIf Selection = "十" Then
  57.                     Selection = "11"
  58.                 ElseIf Selection = "百" Then
  59.                     Selection = "佰"
  60.                 ElseIf Selection = "零" Then
  61.                     Selection = "0"
  62.                 End If
  63.                 Selection.MoveRight Unit:=wdCharacter, Count:=1
  64.                 i = i + 1
  65.             Loop Until i = v
  66.         End If
  67.         Selection.MoveRight Unit:=wdCharacter, Count:=1
  68.         i = 0
  69.     Loop
  70.     MsgBox "处理完毕!--下面请自行执行【第一章/条】宏完成第1条加粗任务!", vbOKOnly + vbExclamation, "第一条转第1条"
  71. End Sub

复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-3 16:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
相见是缘8 发表于 2020-3-3 15:01
给你一个 413191246se 老师的代码,运成试试,参考一下。

试了下,直接用看来是不行的。
谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-3 16:23 | 显示全部楼层
zhanglei1371 发表于 2020-3-3 12:11
可以了解下自动编号域。seq+Chinesenum3。可呈现大写。具体百度下,或论坛搜索下。

试了下,的确这个功能可以达到完全自动编号的功能,谢谢~
如果是完全自己做的应该没问题的,现在存在的问题,要改别人已经编号的第一条、第二条。

TA的精华主题

TA的得分主题

发表于 2020-3-3 17:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 批量将第X条改成汉字第n条1()
    iflag = 0
    With ActiveDocument.Content.Find
        .MatchWildcards = True
        .Text = "第X条"
        Do While .Execute
            Set oRng = .Parent
            oRng.Start = oRng.Start + 1
            oRng.End = oRng.End - 1
            iflag = iflag + 1
            oRng.Fields.Add Range:=oRng, Text:="= " & iflag & " \* CHINESENUM3"
            .Parent.Start = .Parent.End
        Loop
    End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-3 18:56 | 显示全部楼层
cuanju 发表于 2020-3-3 17:04
Sub 批量将第X条改成汉字第n条1()
    iflag = 0
    With ActiveDocument.Content.Find

太谢谢了~实测可以用。
但是有一个问题还是存在,就是不是第X条开始的,比如有一段
第X条
(一)如果有XX情况,按第X条执行。
那么(一)后面这个第X条,也会被纳入排序。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-3 18:59 | 显示全部楼层
cuanju 发表于 2020-3-3 17:04
Sub 批量将第X条改成汉字第n条1()
    iflag = 0
    With ActiveDocument.Content.Find

感觉需要添加触发的判断条件,“第”开头,而且在前7个字符内还有“条”。

TA的精华主题

TA的得分主题

发表于 2020-3-3 20:27 | 显示全部楼层
本帖最后由 cuanju 于 2020-3-4 09:51 编辑
^天堂里的傻孩子 发表于 2020-3-3 18:59
感觉需要添加触发的判断条件,“第”开头,而且在前7个字符内还有“条”。

如果要改的“第X条”都在段首,则用以下代码。
============================
Sub d2()
    iflag = 0
    With ActiveDocument.Content.Find
        .MatchWildcards = True
        .Text = "^13第X条"
        Do While .Execute
            Set oRng = .Parent
            oRng.Start = oRng.Start + 2
            oRng.End = oRng.End - 1
            iflag = iflag + 1
            oRng.Fields.Add Range:=oRng, Text:="= " & iflag & " \* CHINESENUM3"
            .Parent.Start = .Parent.End
        Loop
    End With
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-4 10:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cuanju 发表于 2020-3-3 17:04
Sub 批量将第X条改成汉字第n条1()
    iflag = 0
    With ActiveDocument.Content.Find

还有一个问题,查找的不是  第X条,X是一个代表,可以是一二三十,一百一十一,等等。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-1 15:10 , Processed in 0.025998 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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