ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 195|回复: 3

[求助] 删去指定空格,嫌啰嗦,请援手。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-2-7 10:17 | 显示全部楼层 |阅读模式
本帖最后由 weiyingde 于 2020-2-7 10:38 编辑

目的:现对文档作格式前的预处理,要求删除汉字之间的空格、括号内的答案前后的空格、文档空行等。
问题:括号的答案前后空格不规范:数量不限,或有或无。无法用量词界定。问题如下。

Sub word查找替换无法删去指定空格1()
'预处理:删除汉字之间的空格、括号内的空格、空行。
Dim isr As String
With ActiveDocument.Content
     .Find.Execute "([一-龥]@)([ ]@)([一-龥]@)", , , 1, , , 1, , , "\1\3", 2
     .Find.Execute "([\((])(*)([A-Z])(*)([\))])", , , 1, , , 1, , , "\1\3\5", 2 '删去括号内的空格,"([\((])(^32@)([A-Z])(^32@)([\))])"不能匹配,因为@代表一个以上。
     .Find.Execute "^11", , , 1, , , 1, , , "^p", 2
     .Find.Execute "^13^13", , , 1, , , 1, , , "^p", 2
     .Find.Execute "[ ]{2,}", , , 1, , , 1, , , "  ", 2
End With
End Sub
'结果:7题中选枝中员工(职工)的括号内容去掉了,因为*的意思是:代表任意字符,结果显然是牛死虱死……


Sub word查找替换无法删去指定空格2()
'预处理:删除汉字之间的空格、括号内的空格、空行。
Dim isr As String
With ActiveDocument.Content
     .Find.Execute "([一-龥]@)([ ]@)([一-龥]@)", , , 1, , , 1, , , "\1\3", 2
     .Find.Execute "([\((])([ ]@)([A-Z])([ ]@)([\))])", , , 1, , , 1, , , "\1\3\5", 2 '删去括号内的空格,"([\((])(^32@)([A-Z])(^32@)([\))])"不能匹配,因为@代表一个以上。
     .Find.Execute "^11", , , 1, , , 1, , , "^p", 2
     .Find.Execute "^13^13", , , 1, , , 1, , , "^p", 2
     .Find.Execute "[ ]{2,}", , , 1, , , 1, , , "  ", 2
End With
End Sub
'结果:7题中括号内的空格没有删去,因为@,是一个及以上,有word通配符“零个”以上的量词,该怎么办呢?


Sub word查找替换无法删去指定空格3()
'预处理:删除汉字之间的空格、括号内的空格、空行。
Dim isr As String
With ActiveDocument.Content
     .Find.Execute "([一-龥]@)([ ]@)([一-龥]@)", , , 1, , , 1, , , "\1\3", 2
     .Find.Execute "([\((])([ ]@)([A-Z])([ ]@)([\))])", , , 1, , , 1, , , "\1\3\5", 2
     .Find.Execute "([\((])([A-Z])([ ]@)([\))])", , , 1, , , 1, , , "\1\2\4", 2
     .Find.Execute "([\((])([ ]@)([A-Z])([\))])", , , 1, , , 1, , , "\1\3\4", 2
     .Find.Execute "^11", , , 1, , , 1, , , "^p", 2
     .Find.Execute "^13^13", , , 1, , , 1, , , "^p", 2
     .Find.Execute "[ ]{2,}", , , 1, , , 1, , , "  ", 2
End With
End Sub
'结果:删去了空格,但用了三行的代码为代价,显得极为啰嗦,有简洁的代码?——请大侠援手。

附件如下:

word查找替换无法删去指定空格.rar

15.65 KB, 下载次数: 29

TA的精华主题

TA的得分主题

发表于 2020-2-29 15:39 | 显示全部楼层
如果用find对象处理,感觉也简不到哪里,只是原代码对中文间的空格处理可能有遗漏。可试试如下代码:
  1. Sub test()
  2.     Application.ScreenUpdating = False
  3.     With ActiveDocument.Content.Find
  4.         .Execute "[^11^13]{1,}", , , 1, , , 1, , , "^p", 2
  5.         .Execute "^32{2,}", , , 1, , , 1, , , "^32", 2
  6.         .Execute "([\((])^32([A-Z^32]@[\))])", , , 1, , , 1, , , "\1\2", 2
  7.         .Execute "([\((][A-Z]@)^32([\))])", , , 1, , , 1, , , "\1\2", 2
  8.         Do While .Execute("([一-龥])^32([一-龥])", , , 1, , , 1, , , "\1\2", 2) = True
  9.         Loop
  10.     End With
  11.     Application.ScreenUpdating = True
  12. End Sub
复制代码

另外,对手动换行符的替换会导致其下一行的段落格式改变。可先将自动编号转换为文本,或另行处理段落格式

评分

参与人数 2鲜花 +5 收起 理由
cuanju + 2 太强大了
weiyingde + 3 感谢帮助

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-29 20:11 | 显示全部楼层
sylun 发表于 2020-2-29 15:39
如果用find对象处理,感觉也简不到哪里,只是原代码对中文间的空格处理可能有遗漏。可试试如下代码:
另外 ...

谢谢大师指教。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-29 20:12 | 显示全部楼层
sylun 发表于 2020-2-29 15:39
如果用find对象处理,感觉也简不到哪里,只是原代码对中文间的空格处理可能有遗漏。可试试如下代码:
另外 ...

谢谢大师指教。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

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

GMT+8, 2020-4-4 19:42 , Processed in 0.077306 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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