ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创并分享]中英文标点互换

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-12-2 06:01 | 显示全部楼层 |阅读模式

简化和优化了原代码。

Sub ToggleInterpunction()'中英文标点互换

Dim ChineseInterpunction() As Variant, EnglishInterpunction() As Variant

Dim myArray1() As Variant, myArray2() As Variant, strFind As String, strRep As String

Dim msgResult As VbMsgBoxResult, N As Byte

'定义一个中文标点的数组对象

ChineseInterpunction = Array("", "", "", "", "", "", "……", "", "", "", "", "", "")

'定义一个英文标点的数组对象

EnglishInterpunction = Array(".", ",", ";", ":", "?", "!", "…", "-", "~", "(", ")", "<", ">")

'提示用户交互的MSGBOX对话框

msgResult = MsgBox("您想中英标点互换吗?Y将中文标点转为英文标点,N将英文标点转为中文标点!", vbYesNoCancel)

Select Case msgResult

Case vbCancel

Exit Sub '如果用户选择了取消按钮,则退出程序运行

Case vbYes '如果用户选择了YES,则将中文标点转换为英文标点

myArray1 = ChineseInterpunction

myArray2 = EnglishInterpunction

strFind = "“(*)”"

strRep = """\1"""

Case vbNo '如果用户选择了NO,则将英文标点转换为中文标点

myArray1 = EnglishInterpunction

myArray2 = ChineseInterpunction

strFind = """(*)"""

strRep = "“\1”"

End Select

Application.ScreenUpdating = False '关闭屏幕更新

For N = 0 To UBound(ChineseInterpunction) '从数组的下标到上标间作一个循环

With ActiveDocument.Content.Find

.ClearFormatting '不限定查找格式

.MatchWildcards = False '不使用通配符

'查找相应的英文标点,替换为对应的中文标点

.Execute findtext:=myArray1(N), replacewith:=myArray2(N), Replace:=wdReplaceAll

End With

Next

With ActiveDocument.Content.Find

.ClearFormatting '不限定查找格式

.MatchWildcards = True '使用通配符

.Execute findtext:=strFind, replacewith:=strRep, Replace:=wdReplaceAll

End With

Application.ScreenUpdating = True '恢复屏幕更新

End Sub

相关链接:

http://club.excelhome.net/viewthread.php?tid=99049&replyID=&skin=0

TA的精华主题

TA的得分主题

发表于 2005-12-2 08:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

收藏了,即便用,也得找楼主直接指导。

TA的精华主题

TA的得分主题

发表于 2005-12-2 09:24 | 显示全部楼层

老大你的代码一处值得商榷:

1、如果工具\自动更正选项\键入式自动套用格式\直引号替换为双引号的勾不去掉的话,英文双引号替换为中文双引号是完不成的。

还有一处比较奇怪:把此代码先复制到Word中,再从Word复制到VBA中时,strFind = """(*)"""自动变成strFind = ""(*)"",必须要手工再添加""。strRep = "“\1”"变成strRep = ""\1"",也必须要手工改正,这是否就是老大上次所说的差别?

不如妥否?

[此贴子已经被作者于2005-12-2 9:27:26编辑过]

TA的精华主题

TA的得分主题

发表于 2005-12-3 11:02 | 显示全部楼层

我这里测试,好像英文引号,无论怎么设置,都无法转换为全角的中文引号。

把下面的内容复制到word中作为测试文本:

"abcd"
"cdef"
"hijk"
"中国"

TA的精华主题

TA的得分主题

发表于 2005-12-3 11:05 | 显示全部楼层
转换后的英文引号虽然已经是弯引号了,但从显示的结果看,仍然是半角的,除非手工选中半角弯引号,把字体改为“宋体”或其它中文字体,半角弯引号才会变成全角的弯引号。

TA的精华主题

TA的得分主题

发表于 2005-12-3 11:18 | 显示全部楼层

查了一下几个相关选项对应的属性,如下:

AutoFormatReplaceQuotes 属性

参阅应用于示例特性

如果该属性值为 True,则当 Word 自动设置文档或区域格式时,直引号会自动更改为弯引号。Boolean 类型,可读写。

示例

本示例启用将直引号自动替换为弯引号的功能,然后自动设置当前所选内容的格式。

Options.AutoFormatReplaceQuotes = True
Selection.Range.AutoFormat
 
 

AutoFormatAsYouTypeReplaceQuotes 属性

参阅应用于示例特性

如果该属性值为 True,则键入时自动将所键入的直引号替换为弯引号。Boolean 类型,可读写。

示例

本示例启用将所键入的直引号自动替换为弯引号的功能。

Options.AutoFormatAsYouTypeReplaceQuotes = True

TA的精华主题

TA的得分主题

发表于 2005-12-3 11:47 | 显示全部楼层

这是因为本论坛所使用的字体所致,因为tahoma字下的双引号就是这样,这与老大的代码无关。

你可以这样,

把以下代码加进去。

With ActiveDocument.Content

.Font.Name = "宋体"

End With

TA的精华主题

TA的得分主题

发表于 2006-11-6 09:22 | 显示全部楼层

好像论坛的字体设置不是很好。中英文设置不是特别顺。

www.DEEPIN.org的论坛设置非常美观,请版主看看参考一下。

[此贴子已经被作者于2006-11-6 9:25:17编辑过]

TA的精华主题

TA的得分主题

发表于 2006-11-24 15:10 | 显示全部楼层

如果能考虑到排除千分位的代码就更好了!

TA的精华主题

TA的得分主题

发表于 2007-5-18 20:19 | 显示全部楼层

非常高兴又得到好东西

老大,我在测试时用起来非常方便,但也有个小问题不明白,当我只有一个英文句号时转成中文句号可以的,但连续的,如“.............”转中文时不成功啊

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 05:55 , Processed in 0.038122 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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