当前位置: 代码迷 >> VBA >> 将Word中的英文单、双引号转换为中文标点,存在一个有关问题
  详细解决方案

将Word中的英文单、双引号转换为中文标点,存在一个有关问题

热度:9179   发布时间:2013-02-26 00:00:00.0
将Word中的英文单、双引号转换为中文标点,存在一个问题求助!
这是网上搜到的一个宏代码,能正常运行,但当中存在一个问题:
'==================================================================
Sub 英文单双引号转中文()
  Dim CountD As Integer, CountS As Integer, i As Integer, j As Integer, Sh As Byte '声明变量
  Dim ywdy As String, zwdy1 As String, zwdy2 As String, ywsy As String, zwsy1 As String, zwsy2 As String '声明变量

  '以下代码统计出文中的引号数目(包括""“”)
  On Error Resume Next
  ywdy = "'"
  zwdy1 = "‘"
  zwdy2 = "’"
  ywsy = """"
  zwsy1 = "“"
  zwsy2 = "”"

  sure = MsgBox("请先确保您已将WORD的“工具”-自动更正选项-键入时自动套用格式-键入时自动替换-“直引号替换为弯引号”的勾已去掉。" + vbCrLf + " 如果您已去掉勾选,请点击“确定”,否则请按取消", vbOKCancel, "英文单、双引号转中文单、双引号")
  If sure = 1 Then

  With ActiveDocument.Content.Find
  Do While .Execute(FindText:=ywdy, Forward:=True, Format:=True) = True
  Countd = Countd + 1
  Loop
  End With
  For j = 1 To Countd
  Sh = j Mod 2 '求i值除以2的余数
  If Sh <> 0 Then '如果余数不等于0(即为奇数),则将相应的引号替'换为“前d”
  With ActiveDocument.Content.Find
  .Text = ywdy
  .Replacement.Text = "前d"
  .Execute Replace:=wdReplaceOne, Forward:=True
  End With
  Else
  With ActiveDocument.Content.Find '反之则将相应的引号替换为“后d”
  .Text = ywdy
  .Replacement.Text = "后d"
  .Execute Replace:=wdReplaceOne, Forward:=True
  End With
  End If
  Next '进行下一对引号的替换
  With ActiveDocument.Content.Find
  '以下代码将所有的“前d”替换为左引号
  .Text = "前d"
  .Replacement.Text = zwdy1
  .Execute Replace:=wdReplaceAll, Forward:=True
  '以下代码将所有的“后d”替换为右引号
  .Text = "后d"
  .Replacement.Text = zwdy2
  .Execute Replace:=wdReplaceAll, Forward:=True
  End With

  With ActiveDocument.Content.Find
  Do While .Execute(FindText:=ywsy, Forward:=True, Format:=True) = True
  Counts = Counts + 1
  Loop
  End With
  For i = 1 To Counts
  Sh = i Mod 2 '求i值除以2的余数
  If Sh <> 0 Then '如果余数不等于0(即为奇数),则将相应的引号替'换为“前d”
  With ActiveDocument.Content.Find
  .Text = ywsy
  .Replacement.Text = "前s"
  .Execute Replace:=wdReplaceOne, Forward:=True
  End With
  Else
  With ActiveDocument.Content.Find '反之则将相应的引号替换为“后d”
  .Text = ywsy
  .Replacement.Text = "后s"
  .Execute Replace:=wdReplaceOne, Forward:=True
  End With
  End If
  Next '进行下一对引号的替换
  With ActiveDocument.Content.Find
  '以下代码将所有的“前s”替换为左引号
  .Text = "前s"
  .Replacement.Text = zwsy1
  .Execute Replace:=wdReplaceAll, Forward:=True
  '以下代码将所有的“后s”替换为右引号
  .Text = "后s"
  .Replacement.Text = zwsy2
  .Execute Replace:=wdReplaceAll, Forward:=True
  End With
  相关解决方案