Word VBA技术:复制带有自动编号的文本并在粘贴时保留编号的数字

2023-02-24 20:26:39 浏览数 (1)

标签: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

注意,在运行代码前,先要选择包含自动编号的文本内容。然后,运行代码。接着,在要粘贴文本的位置进行粘贴操作。这样,原始文本内容(包括自动编号)保持不变。

0 人点赞