Word2019中Visio对象图片插入题注时自动删除标签与编号前的空格,编号后添加空格

问题引入

撰写论文时为了修改方便,通常以插入题注和交叉引用的方式来给图片标号,这样修改图片和图号后可以方便、自动地更新。

然而,Word在插入题注上从03到13一直没有针对中国用户优化。

  1. 插入题注的标签与编号间有一个空格,当标签是中文时需要用户手动删除
  2. 标签后竟然不插入空格!

新浪微博大神Endlesswx通过宏编程很好地解决了这个问题,具体请看新浪博客

Word插入题注时自动删除标签与编号前的空格,编号后添加空格

  • 例如,我们给图片A添加题注:图1+空格符+图片A
  • Word自带的添加题注功能添加后为:图+空格符+1
  • 而我们想要的效果是:图1+空格符

问题分析

当你在Word2019中对Visio对象的图片(Visio中画的图直接组合复制到word中)通过上面这个宏去操作的时候,会出现问题,经过调试发现,问题在这儿

 Selection.Fields.ToggleShowCodes  '切换域代码,这样才能用^d查找域

这句代码的主要思路是:将题注的标签和编号一起选中,即将图1切换为域代码,然后通过^d查找域的方法(具体不太懂,但没关系)来找关键字,然后进行替换,达成我们想要的目的。

'选定整个插入的题注内容,将域代码切换回来endPt = endPt + 1 '增加空格后,末位加1With Selection.Start = startPt.End = endPt.Fields.ToggleShowCodes   '切换域代码(切换回来)End With

这段代码的功能是:将修改后的图+标签+编号一起选中,然后从域代码切换回来。需要注意的地方是这段代码会将图片也选中,当图片是普通的图片时,当然没有任何问题;但当图片是Visio对象图片时,问题就来了,这段代码会将Visio对象图片切换为一串代码。

问题解决

究其原因就是切换回来的时候连图片也选中了,那么就好办了,我们让它切换的时候还是只选中标签+编号,然后再执行切换代码即可(当然你也可以在Word中手动再切换回来)。

经过调试,更改这段代码,将标签的位置设置为起始位置即可

更改前:

'删除标签与编号间的空格(英文后的保留)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 '删除空格后,末位减1Selection.End = endPtEnd IfEnd With

更改后:

'删除标签与编号间的空格(英文后的保留)
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 '删除空格后,末位减1startPt = Selection.Start '更改的代码Selection.End = endPtEnd If
End With

倒数第4行为新加入的代码,这样就不会修改Visio对象图片了,完美解决。

完整宏代码

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也可换成wdDialogInsertCaptionApplication.ScreenUpdating = False     '关闭屏幕更新Lab = Dialogs(357).LabelendPt = 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 '删除空格后,末位减1startPt = Selection.StartSelection.End = endPtEnd IfEnd 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 '增加空格后,末位加1With 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 '继续查找.ExecuteEnd WithSelection.MoveLeft Unit:=wdCharacter, Count:=1  '定位到段尾回车前End IfApplication.ScreenUpdating = True          '恢复屏幕更新End Sub

感悟

程序猿就是好啊,自己动手,丰衣足食,哈哈哈!!!

欢迎关注,不断更新中……

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【32位win7一键扫雷】32位win7系统自带扫雷游戏逆向分析之一键扫雷(附VS代码工程文件、可执行文件和OD分析缓存文件)

实现效果 视频地址:https://www.zhihu.com/zvideo/1373742900744974336 附一张扫雷自定义中难度最大时进行一键扫雷的截图,如下,24*30,共668颗雷。 前言 一直对逆向感兴趣,就拿最简单的扫雷开始,对于XP系统中的扫雷,雷的数目以及雷区的地址都是固定的,可以直接通过…

基于51单片机的智能电子秤设计课程设计毕业设计

微信公众号:创享日记 对话框发送:单片机电子秤 获取仿原理图、真源文件、源程序代码和论文报告等 由STC89C51单片机最小系统LCD1602液晶显示模块HX711AD模块LED模块蜂鸣器按键模块10kg压力传感器构成。 具体功能: 1、数码管显示当前的重量&a…

java文件序列化_通过快速Java和文件序列化加快速度

java文件序列化从Java的第一个版本开始&#xff0c;许多开发人员每天都在努力实现至少与C / C 一样好的性能。 JVM供应商正在通过实现一些新的JIT算法来尽力而为&#xff0c;但仍有许多工作要做&#xff0c;尤其是在我们如何使用Java方面。 例如&#xff0c;对象<->文件…

【黑客帝国数字雨屏保】基于Win32的黑客帝国数字雨屏幕保护程序(附VS工程代码文件和可执行文件)

运行效果 代码结构 //黑客帝国数字雨 花心胡萝卜 #包含 <windows.h> #包含 <stdlib.h>#define 时钟编号 1 #define 最大长度 25 //一个显示列的最大长度 #define 最小长度 8 //一个显示列的最小长度 // 类型定义 结构类型 _字符序列 {//整个当作屏幕的一个显示列…

TestContainers和Spring Boot

TestContainers太棒了&#xff01; 它提供了一种非常方便的方式来启动和清除JUnit测试中的Docker容器。 此功能对于将应用程序与实际数据库以及可使用docker映像的任何其他资源进行集成测试非常有用。 我的目标是演示使用TestContainers对基于JPA的Spring Boot Application进行…

【模式识别】信号检测实验及MATLAB仿真

一、 参数 高斯噪声均值 u = 0 u = 0 u=0,方差 σ = 1 \sigma =

【模式识别】Fisher线性判别实验报告之MATLAB仿真

一、 参数 1.题设三个类,每个类均有10个样本,分别为w1,w2,w3,因此采用两两互相分类,最后得出结果; 2.三类样本的均值向量依次为m1,m2,m3; 3.三类样本的类内离散度矩阵依次为S1,S2,S3; 4.对于w1和w2,总类内离散度矩阵为Sw12,类间离散度矩阵为Sb12,通过矩阵特…

不知所措:您是否真的需要为您的API提供客户端库?

RESTful Web服务和API的优点在于&#xff0c;任何使用HTTP协议的使用者都可以理解和使用它。 但是&#xff0c;同样的难题一遍又一遍地弹出&#xff1a;您是否应该将Web APis与客户端库一起使用&#xff1f; 如果是&#xff0c;您应该支持哪些语言或/和框架&#xff1f; 通常这…

【模式识别】K均值聚类算法应用实验报告及MATLAB仿真

一、 实验目的 1.掌握K均值聚类算法的原理和实现过程; 2.掌握K均值聚类算法的应用方法。 二、 实验内容 1.彩色图像分割 选择一幅图像,分别按三种颜色数进行彩色图像分割的结果(原图和分割图)。步骤如下: (1) 第一步:读入一幅rgb图像并显示; (2) 第二步:将该幅图…

【模式识别】特征评价和可分性判据实验报告及MATLAB仿真

一、 实验目的 1.掌握几种常用的特征评价方法和可分性判据; 2.解图像阈值分割中几种确定阈值的方法。 二、 实验原理 假设图像中出现的最大灰度级为m,阈值为g,目标部分灰度均值为mean1,像素数占整个图像比例为w1;背景部分灰度均值为mean2,像素数占整个图像比例为w2。…

web应用插件开发_Web应用程序的简单插件系统

web应用插件开发我们需要制作多个具有很多共享功能的基于Web的项目。 为此&#xff0c;某种插件系统将是一个不错的选择&#xff08;作为粘贴粘贴内容的替代方法&#xff09;。 有些框架&#xff08;例如grails&#xff09;可以选择制作Web插件&#xff0c;但大多数没有&#x…

【自适应盲均衡2】多径衰落信道的复数常模算法(CMA)的理论推导与MATLAB仿真

关注公号【逆向通信猿】更精彩!!! 关于均衡的基础知识,首先可参考本人博客 LMMSE、Godard、CMA常模、Sato等算法在信道均衡中的应用理论与MATLAB仿真 理论推导 代价函数 J = E [ e G o d a r d p

【自适应盲均衡3】多模算法(MMA)——复数改进常模算法(MCMA)的理论推导与MATLAB仿真

关注公号【逆向通信猿】更精彩!!! 接上篇【自适应均衡2】多径衰落信道的复数常模算法(CMA)的理论推导与MATLAB仿真 理论推导 MMA或者MCMA其实是在CMA基础上改进而得到的,有学者称其为实虚部分开的常模算法。该算法使均衡器输出信号的实部与虚部分别收敛于各自的模值,改…

程序猿必备工具『CSDN浏览器助手』之超实用小工具测评

CSDN浏览器助手简介 CSDN浏览器助手由CSDN官方开发&#xff0c;集成【一键呼出搜索】、【万能快捷工具】、【个性标签页】和【 “真”免广告】四大功能&#xff0c;打开后给人的第一印象就是 清新脱俗 四个字&#xff0c;功能非常丰富&#xff0c;快捷键的使用能够大大提高工作…

【自适应盲均衡4】基于RLS的多径衰落信道均衡算法(RLS-CMA)的理论推导与MATLAB仿真

关注公号【逆向通信猿】更精彩!!! 一、回顾CMA和MMA 对于前面两种算法 【自适应均衡】多径衰落信道的复数常模算法(CMA)的理论推导与MATLAB仿真 【自适应均衡】多模算法(MMA)——复数改进常模算法(MCMA)的理论推导与MATLAB仿真 误差信号为:

apache camel_使用Java的Apache Camel入门

apache camelApache Camel是一个非常有用的库&#xff0c;可以帮助您处理来自许多不同来源的事件或消息。 您可以通过许多不同的协议&#xff08;例如在VM&#xff0c;HTTP&#xff0c;FTP&#xff0c;JMS甚至DIRECTORY / FILE之间&#xff09;移动这些消息&#xff0c;但仍然使…

【自适应(盲)均衡6】信号过多径衰落信道的矩阵乘法表示之Toeplitz矩阵和Toeplitz块矩阵的生成(分数间隔FSE)

关注公号【逆向通信猿】更精彩!!! 信号过系统(多径信道)的连续形式 信号过系统(多径信道)的离散采样形式 通常接收端处理的是数字信号,需对接收信号进行采样,当采样率为符号速率时,即为符号间隔采样;采样率为符号速率的P倍时,为分数间隔采样 至于为什么要用分数…

JDK 9/10/11:Java字符串上+ =带来的副作用

问题“ 为什么array [i &#xff05;n] i ”在Java 8和Java 10中给出不同的结果&#xff1f; ”已于本周初发布在StackOverflow.com上 。 它指向JDK9和更高版本中存在的Java编译器中的错误 &#xff0c;但JDK8中不存在。 如StackOverflow线程上所述&#xff0c; Didier L提供…

Matlab库中过采样函数rcosflt参数及源代码详解(翻译)

函数定义 rcosflt函数作为MATLAB即将被替换的函数,在MATLAB R2018b中还可以使用,但是已经查不到帮助文档;虽说是要即将被替换,但是函数内部的原理其实都是一样的,这个函数搞懂了,不管被替换成什么,只要看看新函数的说明文档就知道怎么使用了,说白了就是“万变不离其宗…

【自适应盲均衡7】分数间隔的复数常模算法(FSE-CMA)

关注公号【逆向通信猿】更精彩!!! 理论推导 基于分数间隔的复数常模算法(FSE-CMA)的推导其实与符号间隔的算法是类似的,见 【自适应盲均衡2】多径衰落信道的复数常模算法(CMA)的理论推导与MATLAB仿真 分数间隔均衡器模型 分数间隔均衡器通常有两种比较经典的模型,…