Loading... > 本文转自Endlesswx的博客 http://blog.sina.com.cn/s/blog_51817ae50102w8mz.html ## 发现问题 在用Word写论文的时候对图片或者表格进行插入**题注**时发现格式有点不正确,可能有些同学根本没有主要到这个问题,因为就是多个少个半角空格的问题。在此也建议大家在Word中打开<span class="label bg-info">**显示编辑标记**</span> ![J15vBq.jpg](https://s1.ax1x.com/2020/04/20/J15vBq.jpg) 打开后在文档中就可以看到这些编辑表格符号,当然也可以在【Word选项】-【显示】-【始终在屏幕上显示这些格式标记】中勾选这些标记。 ![J3PuIU.jpg](https://s1.ax1x.com/2020/04/20/J3PuIU.jpg) Word中默认的插入题注是这个样子的,在“图”和“表”等标签与编号之间有一个半角空格,但是标签和之后我们要添加的具体题注名称之间没有半角空格,这是不正确的,或者说是不符合我们的习惯。 ![J3iiTK.jpg](https://s1.ax1x.com/2020/04/20/J3iiTK.jpg) <div class="tip inlineBlock success"> 正确的格式应该是在“图”和“表”等标签与编号之间是没有间隔的,然后标签和之后我们要添加的具体题注名称之间有一个半角空格 </div>如图 ![J15jun.jpg](https://s1.ax1x.com/2020/04/20/J15jun.jpg) 一开始的时候是手动调整半角空格,但是这样很麻烦,也很低效,所以在网上找到了解决办法。 ## 程序功能: 1. 程序是调用系统的“插入题注对话框”,以前怎么插题注现在还怎么用,零学习成本与多余步骤 2. 中文与编号间空格删除,英文与编号见空格保留 3. 编号数字与题注内容见添加一个空格,予以区分 ## 使用方法: ### 第一步: 录制一个宏(主要为了创建NewMacros模块,以前录制过的请跳过此步) Word2003:工具→宏→录制新宏→确定→单击“停止”按钮 Word2010或更高版本:单击WORD状态栏的录制宏按钮(或开发工具→录制宏)→确定→单击“停止”按钮 ### 第二步: ALT+F11(打开VBA对话框) 将以下代码粘贴到打开的NewMacros模块中 ### 第三步: 用系统的插入题注即可 另,原作者会为插入题注设置快捷键Alt+[ ## 程序代码 ```VBA Sub InsertCaption() '修改系统插入“题注”命令 '功能:自动删除标签与编号间的空格(英文除外),并在题注数字后添加一个空格;适用于:Word 2003 - 2013,不兼容WPS文字! '真正从原理上协同系统插入题注,无任何前提条件;用户照常插入题注即可,甚至感觉不到程序的存在! 'Endlesswx于2015年8月4日 '另,如果插入的始终未域代码而不是数字,非程序问题,Alt+F9一次即可 Dim Lab As String, startPt As Long, endPt As Long, myrang As Range 'On Error Resume Next '发生错误时让程序继续执行下一句代码 ' Application.ScreenUpdating = False '关闭屏幕更新,2013在此处关闭更新会导致输入框灰色不可选,故修正在调出对话框之后 startPt = Selection.Start 'startPt标注起始点 '***将if条件隐藏隐藏即可实现----手动替换题注空格*** If Application.Dialogs(357).Show = -1 Then '插入“题注”对话框秀出来,如果按确定结束时执行以下程序,避免按取消后的空格,357也可换成wdDialogInsertCaption Application.ScreenUpdating = False '关闭屏幕更新 Lab = Dialogs(357).label endPt = Selection.Start 'endPt标记插入的题注部分终点 Selection.Start = startPt '选定插入的整个题注 '删除标签与编号间的空格(英文后的保留) With Selection.Find .Text = Lab & " " .Forward = True 'False=向上查找,(True=向下查找) .MatchWildcards = False '不使用通配符 If Lab Like "*[0-9a-zA-Z.]" Then '此处判断标签的最后一个字符是否为英文或数字,是则不删除空格 Else .Replacement.Text = Lab .Execute Replace:=wdReplaceOne '替换找到的第一个,此处用作删除空格 endPt = endPt - 1 '删除空格后,末位减1 Selection.End = endPt End If End With '在题注数字后添加一个空格 Selection.Fields.ToggleShowCodes '切换域代码,这样才能用^d查找域 With Selection.Find .Text = "^d" .Replacement.Text = "^& " .Forward = False 'False=向上查找,(True=向下查找) .MatchWildcards = False '不使用通配符 .Execute Replace:=wdReplaceOne '替换找到的第一个,此处用作添加空格 End With '选定整个插入的题注内容,将域代码切换回来 endPt = endPt + 1 '增加空格后,末位加1 With Selection .Start = startPt .End = endPt .Fields.ToggleShowCodes '切换域代码(切换回来) End With '将光标定位至题注所在段尾处 ' Selection.MoveRight Unit:=wdCharacter, Count:=1 '此句光标返回插入题注前的原始位置,对于已经输好标题的情况并不合适 '选择段尾回车符 With Selection.Find .Text = "^13" .Forward = True 'False=向上查找,(True=向下查找) .MatchWildcards = False '不使用通配符 .Wrap = wdFindContinue '继续查找 .Execute End With Selection.MoveLeft Unit:=wdCharacter, Count:=1 '定位到段尾回车前 End If Application.ScreenUpdating = True '恢复屏幕更新 End Sub ``` 最后修改:2020 年 12 月 05 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏