这是网上搜到的一个宏代码,能正常运行,但当中存在一个问题:
'==================================================================
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