+ -
当前位置:首页 → 问答吧 → [原创并分享]中英文标点互换

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

时间:2005-12-02

来源:互联网

简化和优化了原代码。

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

作者: 守柔   发布时间: 2005-12-02

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

作者: 办公之星   发布时间: 2005-12-02

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

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

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

不如妥否?

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

作者: konggs   发布时间: 2005-12-02

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

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

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

作者: gues1688   发布时间: 2005-12-03

转换后的英文引号虽然已经是弯引号了,但从显示的结果看,仍然是半角的,除非手工选中半角弯引号,把字体改为“宋体”或其它中文字体,半角弯引号才会变成全角的弯引号。

作者: gues1688   发布时间: 2005-12-03

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

AutoFormatReplaceQuotes 属性

参阅应用于示例特性

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

示例

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

Options.AutoFormatReplaceQuotes = TrueSelection.Range.AutoFormat
 
 
AutoFormatAsYouTypeReplaceQuotes 属性参阅应用于示例特性
如果该属性值为 True,则键入时自动将所键入的直引号替换为弯引号。Boolean 类型,可读写。示例
本示例启用将所键入的直引号自动替换为弯引号的功能。Options.AutoFormatAsYouTypeReplaceQuotes = True

作者: gues1688   发布时间: 2005-12-03

你可以这样,

With ActiveDocument.Content

End With

作者: konggs   发布时间: 2005-12-03

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

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

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

作者: zjfangbo   发布时间: 2006-11-06

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

作者: billdon   发布时间: 2006-11-24

非常高兴又得到好东西

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

作者: gao2ming1   发布时间: 2007-05-18

好东东,收下了,谢谢楼主!!!

作者: narutoshyb   发布时间: 2007-05-24

代码怎么使用啊,放在哪里运行啊,

我是新手,请指教

作者: 寻找殒梦   发布时间: 2007-06-08

请调整代码 加个转换结果统计如何?

作者: studio86   发布时间: 2008-03-28

这个太经典了,正好要用上

作者: taigaoxiao   发布时间: 2008-03-28

呵呵,留着大用

作者: hpw   发布时间: 2008-03-28

WORD的宏几乎没用过,谢谢LZ分享

作者: bibisin   发布时间: 2009-06-10

以前看过这个帖子了,现在才知道原创在这里
果然藏龙卧虎哦

作者: coopercool   发布时间: 2009-08-17

看不懂,但收藏了

作者: Ericall   发布时间: 2011-05-05