ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 英文双引号替换为中文双引号(全自动完美解决!)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-26 10:20 | 显示全部楼层
本帖最后由 limshanb 于 2014-11-26 10:39 编辑

网上有许多将英文引号替换为中文引号的方法,我基本上都试验过了,例如用通配符,(")(*)(")替换为“\2”,这个方法和思路很好,当文中引号都配对时也有效,但是还要在自动格式中修改直引号和弯引号的选项,当文中出现引号不配对(丢掉一半)时也不行。能够容错的替换方法都比较麻烦(多次替换)。
最好的方案,还是用代码的思路,就像一楼给出的代码,只要再加以改善,就非常完美。本来我是想再发起一个帖子向高手求援,但是又怕求援太频繁了招人烦,所以没有发起新帖。

这个问题看起来很简单,很小,好像不值得去开发挖掘似得,其实不然,如果要完美的解决,还是很复杂的,我把准备发新帖拟定的案例顺便发送出来,您如有兴趣就顺便看看,有什么方法能够达到我提出的目标。附件举例的文字是在同一篇文章中出现的多种情况,代码最好能够同时实现替换,不是一个一个地解决。

双引号替换要求的说明.rar

4.26 KB, 下载次数: 51

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-26 10:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我再复制一遍这个宏,我觉得已经没有什么问题了,limshanb你觉得有什么问题呢?
Sub 替换英文双引号为中文()
    Selection.WholeStory
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
      .Text = """"
      .Forward = True
      .Wrap = wdFindStop
      .MatchByte = True
    End With
    With Selection
      While .Find.Execute
          .Text = ChrW(8220)
          .Find.Execute
          .Text = ChrW(8221)
      Wend
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2014-11-26 10:52 | 显示全部楼层
本帖最后由 limshanb 于 2014-11-26 11:01 编辑
413191246se 发表于 2014-11-26 10:25
我再复制一遍这个宏,我觉得已经没有什么问题了,limshanb你觉得有什么问题呢?
Sub 替换英文双引号为中文 ...


这个代码的问题上面已经说明,就是对于文章中出现丢掉半个引号的情况时,就会错误地配对引号弯度方向,因为代码中这一句:  .Text = """"   针对的是配对的双引号,但是,在现实中往往会遇到丢失半个引号的错误,这时候该代码就会找到下一个引号自动配对,而下一个引号不是与丢失掉这个句子配对的,结果就是导致后面的引号弯度方向不对。
换句话说,该代码没有容错的功能。如果能够加上识别丢掉半个引号错误、再酌情处理的功能就完美了

TA的精华主题

TA的得分主题

发表于 2015-11-5 16:55 | 显示全部楼层
413191246se 发表于 2014-11-26 10:25
我再复制一遍这个宏,我觉得已经没有什么问题了,limshanb你觉得有什么问题呢?
Sub 替换英文双引号为中文 ...

师傅好!
您的这个Sub 替换英文双引号为中文() 的宏,运行不了,提示运行时错误5623
请师傅看一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-9 01:09 | 显示全部楼层
英文双引号(无论直的还是弯的),如果粗心作者马虎大意,前后双引号不成对,怎么办呢?

TA的精华主题

TA的得分主题

发表于 2015-11-9 08:13 | 显示全部楼层
本帖最后由 13907933959 于 2015-11-11 09:27 编辑
413191246se 发表于 2015-11-9 01:09
英文双引号(无论直的还是弯的),如果粗心作者马虎大意,前后双引号不成对,怎么办呢?

师傅好!
那只有睁大眼睛,仔细查对,纠正错误。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-9 20:21 | 显示全部楼层
谢谢 139!——我 1 楼所示代码确实在我测试过程中OK,那是因为原文中双引号是配对的,不配对的我没遇到,故未能检测出错误。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-10 20:38 | 显示全部楼层
双引号共有三种形态:
1、中文弯双引号。如:祖国“花朵”鲜艳(中文全角宋体——正常)。
2、英文弯双引号。如:尽管“薯头先生”可爱(英文半角Times New Roman字体—错误)。
3、英文直双引号。如:祖国"花朵"鲜艳(英文半角Times New Roman字体——错误)。
*
解决思路(算法):
三种情况,双引号的ASC值均为34;
前两种情况,前双引号ASC值为-24144,后双引号ASC值为-24143。
第2种情况,变为全角,即为正常宋体弯双引号。
第3种情况,变为全角后,是符号“"”,ASC值为-23646。
*
解决办法:
查找ASC(34),找到三种双引号,变为全角,第1种本来就是全角变不变仍为全角,第2种变为全角变正常,第3种变为符号“"”,ASC值为-23646,查找ASC(-23646),替换为chrw(8220),变为正常中文前双引号,再查找变为chrw(8221),变为正常中文后双引号,问题解决,这种解决办法,英文弯双引号的方向决不会错;直双引号不好说,如果成对也不会错,错也只是本段错(不考虑双引号是否成对,以一个段落为局限范围)。
***下面是我针对英文双引号转中文的最新代码,请各位朋友测试、指正:
  1. Sub 英文双引号转中文()
  2.     Selection.HomeKey Unit:=wdStory
  3.     Selection.Find.ClearFormatting
  4.     Do While Selection.Find.Execute(findtext:=Chr(34), Forward:=True)
  5.         Selection.Range.CharacterWidth = wdWidthFullWidth
  6.         Selection.MoveRight Unit:=wdCharacter, Count:=1
  7.     Loop
  8.     Selection.HomeKey Unit:=wdStory
  9.     Selection.Find.ClearFormatting
  10.     Do While Selection.Find.Execute(findtext:=Chr(-23646), Forward:=True)
  11.         Selection = ChrW(8220)
  12.         Do
  13.             If Selection.Characters.Last.text = vbCr Then GoTo Skip
  14.             Selection.MoveEnd Unit:=wdCharacter, Count:=1
  15.         Loop Until Asc(Selection.Characters.Last) = -23646
  16.         Selection.Characters.Last.text = ChrW(8221)
  17. Skip:
  18.         Selection.MoveRight Unit:=wdCharacter, Count:=1
  19.     Loop
  20. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-11-11 09:31 | 显示全部楼层
413191246se 发表于 2015-11-10 20:38
双引号共有三种形态:
1、中文弯双引号。如:祖国“花朵”鲜艳(中文全角宋体——正常)。
2、英文弯双引 ...

师傅好!
您真是个仔细认真的人,什么事都研究得这么透,难怪技术这么好,真是令人佩服!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-11 09:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
139:过奖!——你说的两宏合并,我认为不必合并。上面的新宏算解决了英文双引号的问题,你说的第一个宏,就是把英文句点转为中文句号,我的宏照样办得到,你愿意用 升华 的也可以。另外,昨天下午我重新编辑了一下《英文标点转中文》,只包含了两个标点:句号、逗号,其它的待填。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 18:36 , Processed in 0.032799 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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