标签:Word VBA
在Word文档中,复制文本并在某处粘贴是经常要进行的操作。然而,如果文档中包含有自动编号的文本内容,例如以自动编号的数字开头的文本,如果要复制的内容不包括第一个编号项,那么这种复制粘贴操作可能会导致问题。在这种情况下,原始文档中的数字和粘贴的文本将不匹配。
下面的代码会解决这样的问题。它将创建文本的副本,其中自动编号的数字已被转换为普通文本,以便在粘贴时保留数字。
代码如下:
代码语言:javascript复制Sub CopyAutoNumbersToNormal()
Dim objDoc As Document
Dim rngRange As Range
Dim strMsg As String
Dim strTitle As String
Dim Response As VbMsgBoxResult
strTitle = "复制所选文本-将自动编号改为正常文本"
Set objDoc = ActiveDocument
'如果没有选择文本则停止
If objDoc.Bookmarks("Sel").Range.Text = "" Then
strMsg = "运行前,必须选择想要插入到其他位置的文本."
MsgBox strMsg, vbOKOnly, strTitle
GoTo ExitHere
End If
strMsg = "如果需要复制包含有自动编号的文档部分内容到其他位置,则运行本程序." & vbCr & _
"本程序将自动编号的数字修改为正常文本,以便在其他位置粘贴时保持正确的数字编号." & vbCr & vbCr & _
"运行程序前,必须选择想要在其他位置插入的文本." & vbCr & vbCr & _
"当程序运行完后,到目标位置粘贴文本." & vbCr & vbCr & _
"注:当前文档仍保持不变."
Response = MsgBox(strMsg, vbOKCancel,strTitle)
'如果用户没有单击"确定"则停止
If Response <> vbOK Then GoTo ExitHere
Set rngRange = objDoc.Range(Start:=Selection.Range.Start, _
End:=Selection.Range.End)
rngRange.ListFormat.ConvertNumbersToText wdNumberParagraph
'当转换数字时复制所选文本
Selection.Copy
'撤销数字转换为原始状态
objDoc.Undo
strMsg = "完成. 现在可以到目标位置并粘贴文本."
MsgBox strMsg, vbOKOnly, strTitle
ExitHere:
Set objDoc = Nothing
Set rngRange = Nothing
End Sub
注意,在运行代码前,先要选择包含自动编号的文本内容。然后,运行代码。接着,在要粘贴文本的位置进行粘贴操作。这样,原始文本内容(包括自动编号)保持不变。