-
word vba 忽略空格查找_VBA代码解决方案第146讲:如何实现Word文档的信息统计
2021-01-26 04:44:53大家好,我们今日继续讲解VBA代码解决方案的第146讲内容:如何实现Word文档的信息统计。熟悉Word的朋友都清楚,对于WORD文档的信息统计,是一个标准的功能,打开一个WORD文档,当选择一段文字后,在下面的信息栏中就...大家好,我们今日继续讲解VBA代码解决方案的第146讲内容:如何实现Word文档的信息统计。熟悉Word的朋友都清楚,对于WORD文档的信息统计,是一个标准的功能,打开一个WORD文档,当选择一段文字后,在下面的信息栏中就会提示选中的字数、段落数等信息。那么这个功能是如何实现的的呢?我们利用VBA可否也可以实现类似的功能呢?今日的内容就当大家实现这个功能。当然,目的仍是让大家熟悉在WORD中如何利用循环语句。
说句实在话,对于一个OFFICE软件,无论是excel还是word,在微软提供的功能中如果想实现循环计算只有两个办法,一是利用数组,二是利用迭代运算。但这两种方法都有自己的局限性,比如迭代,要受到迭代次数的影响,不同的迭代次数运行的结果会有不同,而数组本身就是EXCEL的一个难点,说句夸张的话,在讲数组的文章中,或许你只有在我的这个平台可以能看到系统的讲解,如何的定义,如何的利用,在讲VBA之前我利用了大量的时间给大家讲EXCEL函数及各种高端的应用,如果感兴趣的朋友可以回过头来看看我之前的文章。如果我们理解了VBA这个知识点完全可以用VBA来解决,而且,解决的更好。
今日讲的实例是利用循环统计出所选文本中的句子数量和结尾的标点符号。
Sub mynzsen()
Dim s As Range, SenCount As Integer, MyString As String
Dim EndChar As String, K As Integer
K = 0
With Selection
If .Type = wdNoSelection Then Exit Sub
SenCount = .Sentences.Count '取得所选内容的句子数
For Each s In .Sentences '在句子中循环
K = K + 1
'如果句子中的最后一个字符为段落标记则EndChar为段落标记的前一个字符
If s.Characters(s.Characters.Count) = Chr(13) Then
EndChar = "[第" & K & "句结束标点为 " & s.Characters(s.Characters.Count - 1) & "]"
Else
EndChar = "[第" & K & "句结束标点为 " & s.Characters(s.Characters.Count) & "]"
End If
'以空格为分隔符,将结束标点在变量中累加
MyString = MyString & " " & EndChar
Next
End With
MsgBox "所选内容句子数:" & SenCount & vbCrLf & "结束标点分别为:" & MyString
End Sub
代码截图:
由于在程序中大部分我都做了注释,只是再简单的讲解一下:
上面的程序中需要注意的是对于有选择和没有选择的判断,这里是根据Selection.Type 的值来进行判断的,对于这个值可以有很多种类型,如下:
wdNoSelection 0 No selection.
wdSelectionBlock 6 A block selection.
wdSelectionColumn 4 A column selection.
wdSelectionFrame 3 A frame selection.
wdSelectionInlineShape 7 An inline shape selection.
wdSelectionIP 1 An inline paragraph selection.
wdSelectionNormal 2 A normal or user-defined selection.
wdSelectionRow 5 A row selection.
wdSelectionShape 8 A shape selection.
这里我用的是wdNoSelection也可以用wdSelectionIP,也可以表示没有任何的选中结果,对于这个词语的解释,后者wdSelectionIP的对应英文解释An inline paragraph selection。目前我还没有看到有那种翻译是较为合适的,好在我们的目的是应用,记住就可以了。
下面我们看程序的运行:
在上述的文档中选择了部分文字,运行结果:
今日内容回向:
1 WORD中的循环,你是否明白呢?
2 如何请计算出选择的句子数呢?
《VBA代码解决方案》终于可以和大家见面了,是我将一些非常实用的VBA内容结集成册,PDF文件,可以从中直接查找到你想要解决问题的思路和方法,可以复制文中的VBA代码直接使用。有需要的朋友微信联络我NZ9668。
-
word vba 忽略空格查找_Word批量查找替换VBA代码
2021-01-15 13:35:04编写该代码的目的:初衷该代码最初用于我自己弄得一个用于批量化写word报告的东西,因为我原来需要写一堆格式化的报告,不同报告间除了数据发生了变化,其他几乎一模一样,我想偷懒(主要是我容易写错),就使用VBA写...编写该代码的目的:
初衷
该代码最初用于我自己弄得一个用于批量化写word报告的东西,因为我原来需要写一堆格式化的报告,不同报告间除了数据发生了变化,其他几乎一模一样,我想偷懒(主要是我容易写错),就使用VBA写了一段代码用于实现自动化,
将已有的word文档报告改造成模板,
在一个Excel表格中定义一些变量,包括变量名与变量的值(也有一些数组变量)
使用VBA代码批量的将word中的变量名替换为变量的值
然后就可以开心的仅更新Excel表格,批量的生成报告了~
这个理想很美丽,但实际执行过程中,只有简单点的报告可以这样弄,复杂点的报告因为需要可知化的地方很多,实现起来很痛苦,(特别是一些word中语句需要注意单复数的变换,有些参数缺失时需要完全移除语句),所以该工具旨在我这里用于部分报告的生成。
现在
现在我已经不用写报告了 :)
所以再次想到该代码是最近在翻译一些资料时,机翻总是将一些词汇翻译为一些特定的不合时宜的词,然后需要手动改,改多了我有懒了,再次想到了我之前的代码,修修改改一下又能接着使用了~
正文
代码
'替换word Public wdApp, WrdDoc '定义公共变量类,wdapp, WrdDoc代表文档 Sub 批量查找替换() Application.ScreenUpdating = False '获取目标word文档 Call getwd 'wdapp.Visible = False '开始替换 Call StReplace '清空变量 Set WrdDoc = Nothing Set wdApp = Nothing Application.ScreenUpdating = True MsgBox "转换完成", vbOKOnly, "" 'Application.ScreenUpdating = False End Sub Sub getwd() '获取当前打开的word文档 Set wdApp = GetObject(, "Word.Application") Set WrdDoc = wdApp.Documents(1) End Sub Sub StReplace() Application.ScreenUpdating = False Dim wt, urow1 As Long, lrow1 As Long Dim i1 As Long Dim chaz1 As String, tih1 As String, lsa Set wt = ThisWorkbook.ActiveSheet lrow1 = 2 urow1 = wt.Cells(2000, 1).End(xlUp).Row For i1 = lrow1 To urow1 chaz1 = wt.Cells(i1, 1).Value tih1 = wt.Cells(i1, 2).Value If chaz1 = "" Then Else lsa = czth1(chaz1, tih1) End If Next Application.ScreenUpdating = False 'MsgBox "转换完成", vbOKOnly, "" End Sub
使用方法
把上述代码放在Excel的宏模块中,然后在当前活动的工作表中,A列填须在word中查找的目标(从第二行开始),B列中填对应的替换的值,之后打开需要查找替换的word,然后运行“批量查找替换()”过程即可完成自动的查找替换。
-
vba word 查找_Word宏丨空格、空行还在一个个删?用这个一键搞定!
2020-12-03 07:55:27不称深度指南,只愿浅度指北之前,用 VBA 开发了一个 Excel 插件「浅北表格助手」,随后,也发了两篇关于WordVBA 的教程,后台有小伙伴留言,说希望看到一些偏实用的代码。今天,它来了。我们在写 Word 文档时,很多...不称深度指南,只愿浅度指北之前,用 VBA 开发了一个 Excel 插件「浅北表格助手」,随后,也发了两篇关于WordVBA 的教程,后台有小伙伴留言,说希望看到一些偏实用的代码。今天,它来了。
我们在写 Word 文档时,很多情况下,都需要引用其他地方的文字,比如网上的一段话,或者某个 PDF 文档中的一句话。你可以用复制的方式,或者使用 OCR 进行识别。但通常,你会发现,这些粘贴过来的文字的格式都乱了:比如上图中的这些问题:
1. 存在大量的空行
2. 同样是英文单词,有的字符前后有空格,而有的却没有
3. 使用全角空格以达到段首缩进的目的,但做法错误
4. 还有一些中英标点存在错误。
如果文字数不多还好办,但如果文字数比较多,一个个修改就很麻烦了。而稍懂一点 Word 的人,可能会用查找与替换工具,对一些空行直接删除:
而遇到中英文标点符号错误,查找和替换就稍显笨拙了:
因为标点会有很多,逗号、句号、分号等等,而且需要一一对应。另外,遇到那些本不应该换行的却换了行,只好一个个手动删除:其实,使用VBA,就可以将这些动作组合在一起,帮你完成这样的操作。 大众都需要 删除空行有时,我们为了区分文字来源于不同的部分,可能会手动敲几个回车,或者在其他地方复制的文本,本身就有一些空行,而我们文档编辑最后,需要将这些空行删除。我们可以查找「^p^p」替换为「^p」,然后多次重复这个替换过程,就可以将所有空行删除了。当然,更好的做法是,判断每段是否只有一个字符(换行符),避免了需要多次替换的问题。代码:```Sub 转换并删除空行() If Selection.Type = wdSelectionIP Then If MsgBox("此操作将删除文中所有空行,请确认!", vbOKCancel) = vbOK Then Selection.WholeStory Else Exit Sub End If End If Application.ScreenUpdating = False For Each i In Selection.Paragraphs '在活动文档的段落集合中循环 If Len(i.Range) = 1 Then '判断段落长度 i.Range.Delete n = n + 1 '计数 End If Next Application.ScreenUpdating = True '恢复屏幕更新
MsgBox "共删除空白段落" & n & "个!"End Sub
`` 统一空格使用规范 删除无效空格如果是英文环境,半角空格作为每个单词的分隔符,是不能全部删除的,我们要做的就是,查找那些连续的空格,然后替换为一个空格就可以了。
注意使用通配符。而代码则是:Sub 删除连续空格()If Selection.Type = wdSelectionIP Then MsgBox "请选定一个区域!"Else Application.ScreenUpdating = False '关闭屏幕更新 '替换半角空格 Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "[ ]{2,}" .Replacement.Text = " " .Forward = True .Wrap = wdFindStop '如未找到则停止搜索 .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True ’使用通配符 End With Selection.Find.Execute Replace:=wdReplaceAll ‘这里省略了全角空格和两者夹杂的部分 Application.ScreenUpdating = True '恢复屏幕更新End IfEnd Sub当然,删除全部空格,就更简单了,这里不再赘述。 多见于OCR识别 清除恶意换段对于那些不应该换行但换行的,我称其为「恶意换行」,比如下面这种:我们同样可以通过查找替换完成,我们可以将那些「段尾不是特定的结束符号」的段落标记删除,也就是查找「([!!?。……:;”)}】])^13」,替换「\1」。
这里需要注意的是,需要使用「^13」而不是「^p」,因为勾选了使用通配符,^p已经失效了,这个在我之前的文章有介绍。当然,恶意换行也区分中英文,而这个都是可以通过录制来完成的,这部分就不放代码了,如果你对此有兴趣,可以在我的公众号后台回复「WV01」,获取学习。 犹记被错误标点坑害的论文 中英标点替换我们从其他地方复制到Word中的文字,有时会出现中英标点错位的情况,尤其是在使用OCR工具时。并且,这些错误使用的标点,很难一眼看出来,比如下面的这个‘号:如果我不标注,换个字体,你可能根本看不出来,但甲方可能一眼就瞧出来。
当然,应对这种错误,我们同样可以使用替换功能,但标点符号比较多,而且需要一一对应,因此,我们需要替换多次才可以完成。而在VBA中,我们可以使用数组和循环来很好地解决这个问题:Sub 中英标点互转()Dim ChineseInterpunction() As Variant, EnglishInterpunction() As VariantDim myArray1() As Variant, myArray2() As Variant, strFind As String, strRep As StringDim msgResult As VbMsgBoxResult, n As ByteChineseInterpunction = Array(",", "。", "、", ";", ":", "?", "!", "……", "—", "~", "(", ")", "《", "》", "¥") '定义一个中文标点的数组对象EnglishInterpunction = Array(",", ".", ",", ";", ":", "?", "!", "…", "-", "~", "(", ")", "", "$") '定义一个英文标点的数组对象'如果为英转中,会出现,→、和,→,两种情况,大多数为第二种'因此,将第二种方式放在前面先转换,第一种情况就不会出现msgResult = MsgBox("您正在使用中英标点互换功能,按Y将中文标点转为英文标点,按N将英文标点转为中文标点!退出请点击右上角关闭按钮", vbYesNoCancel)Select Case msgResult '通过调整两数组的先后顺序,以实现中英标点互换 Case vbCancel Exit Sub '如果用户选择了取消按钮,则退出程序运行 Case vbYes myArray1 = ChineseInterpunction myArray2 = EnglishInterpunction strFind = "“(*)”" strRep = """\1""" Case vbNo myArray1 = EnglishInterpunction myArray2 = ChineseInterpunction strFind = """(*)""" strRep = "“\1”"End SelectApplication.ScreenUpdating = False '关闭屏幕更新If Selection.Type = wdSelectionIP Then If MsgBox("此操作将应用至整个文档,请确认!", vbOKCancel) = vbOK Then Selection.WholeStory Else Exit Sub End IfEnd IfFor n = 0 To UBound(ChineseInterpunction) '从数组的下标到上标间作一个循环 With Selection.Find .ClearFormatting '不限定查找格式 .MatchWildcards = False '不使用通配符 '查找相应的array1的标点,替换为对应的array2的标点 .Execute FindText:=myArray1(n), replacewith:=myArray2(n), Replace:=wdReplaceAll End WithNext'替换引号部分With Selection.Find .ClearFormatting '不限定查找格式 .MatchWildcards = True '使用通配符 .Execute FindText:=strFind, replacewith:=strRep, Replace:=wdReplaceAllEnd WithApplication.ScreenUpdating = True '恢复屏幕更新End Sub最后的叨逼叨以上,就是我们日常中见到最多的格式错误问题了,如果你也有这样的困境,可以后台回复「WV01」下载我制作的VBA代码。当然,如果你不会用,可以在B站搜索「未央暮城」,里面有一集我自己录制的视频教程,就讲的这个。▼ 往期精彩回顾 ▼
—— THE END ——
百年修得同船渡,点个在看也很酷 -
如何利用word去除网页代码中的行号
2018-11-27 12:48:25有的时候在网上寻找现成的代码,想直接粘贴到编辑器中就运行使用,结果麻烦来了。前面都是行号,无法去除。如果代码只有几行还好说,如果有个几百行,...,注意在后面多输入几个空格,这样就不会把代码中的数字也给...有的时候在网上寻找现成的代码,想直接粘贴到编辑器中就运行使用,结果麻烦来了。前面都是行号,无法去除。如果代码只有几行还好说,如果有个几百行,那就郁闷了。
为了解决这个问题,我也摸索了一下,总算找到了解决方案。
第一步,打开word,粘贴到word里面之后,Ctrl+H打开搜索替换。
第二步,在查找内容中输入"[1-9]{1,3} ",注意在后面多输入几个空格,这样就不会把代码中的数字也给误删了。
我拿到的代码形如下面的格式:
特点是行号后跟随了一串空格,那么我们就可以利用这个特征了。第三步,替换
行号被成功去除,直接拷贝到代码编辑器即可使用了。但愿能对遇到同样麻烦的小伙伴有所帮助。
-
Word常用查找与替换实例及方法
2010-01-03 22:24:09Word查找栏代码•通配符一览表 II Word查找栏代码•通配符示例 III Word替换栏代码•通配符一览表 IV 部分代码 可用/不可用 的特殊情况 V 使用“通配符”功能时需要注意的要点 VI 实例1:对未设大纲级别的文档自动... -
【word】查找和替换
2020-01-24 15:53:11将*号替换为空格 开始->编辑->替换 替换空行使用^p代码,删除多余空行 #include<iostream> using namespace std; int s1,s2,s3; bool flag = 1; int main() { freopen("1.txt","r",stdin); freopen... -
word批量删除除英文间空格外的空格
2020-09-16 23:40:08word批量删除除英文间空格外的空格方法一新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右... -
软件著作权源代码文档word操作技巧
2020-06-05 10:55:28代码结尾要有结束标志,不要空格和注释。 一、清除整个文档的空行: 方法:用ctrl+a(快捷方式),选中全部源程序代码文档;点击word的查找替换功能 查找:^p^p; 替换为:^p。选择“全部替换”。反复N次,直到全部... -
python 替换文本 通配符_Word VBA|通配符查找、替换、VBA及正则表达式
2020-12-27 17:54:34如要将一个Word文档内的两个汉字中间的空格替换掉(之所以要特定要求两个汉字中间,是为了避免文本中的英文空格替换掉),可以使用查找、替换的通配符。查找:([一-﨩])( )([一-﨩])替换:13写成VBA代码:Sub 替换()... -
删除注释删除空格行方法
2015-12-31 16:19:08统计代码行数: 打开myeclipse-选中项目-右键-properties-myeclipse- 点击按钮“update” 删除整行空格: 用word Ctrl+H,打开替换对话框。 查找内容中输入^p^p。 替换为中输入^p。(英文半角shift+6,... -
word使用技巧大全
2011-03-18 20:37:5399、Word中查找/替换通配符和代码 101 四十三、Word中公式编辑器的使用技巧 104 1、公式编辑器的启动与退出 104 四十四、Word文档设置多个不同的页眉页脚 107 四十五、Word 快捷键 108 四十六、Word 通配符 110 四十... -
使用python将word文档里面的表格数据导出到CSV文件中
2020-02-05 14:54:59在word文档中出现的表格通常不利于查找,往往需要转换为EXCEL文档中才方便进行操作,本文提供的python代码能够将word文档中出现的所有表格格式的数据提取到CSV文件中。 初始的Word文档: 导出后的CSV文件: 目前... -
CSDN代码内容复制后在程序中格式报错处理方法
2018-10-29 13:47:32很多人遇到程序代码复制后格式问题报错后,往往都是...3、将整体代码先复制到新建的word文档中,然后全选文档后找到【开始】菜单下的【替换】按钮,将【查找内容】输入两个空格,将【替换为】输入一个空格,全文执... -
DtR:Word文档(.docx)到renpy脚本文件(.rpy)-源码
2021-02-10 12:04:06查找您的Word文档并选择它 点击选择保存位置按钮 选择一个文件夹以将您的.rpy文件保存到 点击转换按钮 完成了 重要信息 每行必须包含一行,否则将引发错误。 每行必须以以下快捷方式之一开头 缩进会自动添加,因此... -
如何删除谷歌拼音_敲空格,按删除键……简直弱爆了,这才是效率翻倍的最佳途径...
2021-01-12 04:35:22选中表格区域,按Ctrl+H打开查找和替换对话框,点击查找,在查找文本框中输入代码:?>,勾选【使用通配符】,随后【在以下项中查找】中点击下拉按钮,选择【当前所选内容】,点击关闭,之后点击开始—... -
eclipse设置 “alt+/” 作代码提示的快捷键
2013-01-24 10:44:44eclipse更新新版本后,关于代码提示的快捷键发生了改变,变成了 “ctrl+空格” ,但是通常系统中 “ctrl+空格” 是切换输入法,因此把快捷键设置成 “alt+/” 1.点击Windows->Preferences->General->Keys... -
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串
2017-05-06 20:26:52oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视... -
调试经验——任意字符对应的Unicode查询方法及Unicode对应字符的查询
2018-03-29 11:52:53昨天在Spotfire中看到了一个乱码,查找源头,这个字符在Excel是一个空白字符,但不是空格和制表符。 经过一番搜索,终于认识了这个神秘的字符。 方法: 将该空白字符从Excel中复制到Word中,选中该字符(空白... -
idea更改自动提示快捷键
2019-03-14 09:56:46idea中默认的代码自动提示快捷键是Basic Ctrl+空格(可以再搜索框中输入basic快速查找),这个和安装的中文输入法切换快捷键冲突,所以需要修改。 需要将Basic的快捷键修改为Alt+/,但Alt+/被Cyclic Expand Word... -
139. 单词拆分
2020-12-07 11:39:39解题思路:trie+动态规划,前缀树用来快速查找当前字符串是否在字典中,dp数组用来记录哪些子串的位置可以用字典中单词构成,代码如下: class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> ... -
F5在线HTML编辑器 v4.0
2019-11-09 03:26:062、数字、项目编号,减少、增加缩进量自如仿word快速排版模式;3、支持查找、替换,撤消、重做等基本编辑操作;4、提供插入标准换行,及水平线功能;5、支持全选、剪贴、复制、常规粘贴,以及纯文本粘贴;6、支持... -
阿赛在线HTML编辑器 v7.rar
2019-08-29 22:42:192、数字、项目编号,减少、增加缩进量自如仿word快速排版模式; 3、支持查找、替换,撤消、重做等基本编辑操作; 4、提供插入标准换行 ,及水**线功能; 5、支持全选、剪贴、复制、常规粘贴,以及纯文本粘贴; 6、... -
新手简单字符串问题,求解答C语言
2017-07-24 07:29:19一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中... -
LeetCode解题总结
2018-10-09 16:02:199.1 单词变换路径(Word Ladder) 9.1.1 是否存在变换路径 9.1.2 所有最短变换路径9.2 包围区域 10. 深度优先搜索 10.1 N皇后问题 10.2 恢复IP地址 10.3 集合元素之和 10.3.1 元素可以重复 10.3.2 元素不可重复 ... -
Visual C++开发实战1200例(第1卷).(清华出版.刘锐宁.梁水.李伟明).part1
2016-06-16 01:35:39实例170 去除首尾多余空格 实例171 向编辑框中追加字符 4.4 字符串应用 实例172 将选定内容复制到剪贴板 实例173 在ListBox中查找字符串 实例174 统计编辑框中回车个数 实例175 在字符串数组中搜索 实例176 ... -
Visual C++开发实战1200例(第1卷).(清华出版.刘锐宁.梁水.李伟明).part2
2016-06-16 01:38:19实例170 去除首尾多余空格 实例171 向编辑框中追加字符 4.4 字符串应用 实例172 将选定内容复制到剪贴板 实例173 在ListBox中查找字符串 实例174 统计编辑框中回车个数 实例175 在字符串数组中搜索 实例176 ... -
Excel新增工具集
2011-12-20 09:30:27删除与标注重复行、特殊数据行操作代码用字典法编写,比Excel公式与高级筛选提速几十倍。 1、重名查找与姓名美化:本软件不仅能查找同字重名,还能查找同音重名。执行此命令能够为某一列的重复数据(包含汉字同音)... -
每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。 词频省略时使用自动计算的能保证分出该词的词频。 例如...
-
C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载
2018-02-20 01:26:55实例042 去掉字符串中的所有空格 54 实例043 从字符串中分离文件路径、文件名及 扩展名 55 实例044 获取字符串中汉字的个数 57 实例045 批量替换某一类字符串 58 实例046 对字符串进行加密与解密 59 3.3 常用数字... -
Hutool的缩进按照Eclipse(不要跟我说IDEA多好用,维护者非常懒,学不会,IDEA真香,改了Eclipse快捷键后舒服多了)默认(tab)缩进,所以请遵守(不要和我争执空格与tab的问题,这是一个病人的习惯)。 新加的方法...