Vba 将选定的自动编号列表更改为word中的纯文本

Vba 将选定的自动编号列表更改为word中的纯文本,vba,ms-word,ms-office,Vba,Ms Word,Ms Office,我需要创建一个宏,将一些自动编号的列表转换为纯文本。我在下面找到了这个宏,它将完美地完成整个文档,但是我希望保持文档标题等仍然自动编号,只需将文档中编号的需求列表更改为纯文本 Sub Auto_Format_convert_list_numbers() ' ' convert_list_numbers Macro ' Macro created 10/8/08 by WJ Shack ' ActiveDocument.ConvertNumbersToText End Sub 我对这个问题的想

我需要创建一个宏,将一些自动编号的列表转换为纯文本。我在下面找到了这个宏,它将完美地完成整个文档,但是我希望保持文档标题等仍然自动编号,只需将文档中编号的需求列表更改为纯文本

Sub Auto_Format_convert_list_numbers()
'
' convert_list_numbers Macro
' Macro created 10/8/08 by WJ Shack
'
ActiveDocument.ConvertNumbersToText

End Sub
我对这个问题的想法是,也许我可以让它只对我选择的一个列表这样做。当我点击其中一个编号的项目时,它会突出显示列表中的其他项目,我尝试了以下操作,但它出现了一个错误

Sub Auto_Format_convert_list_numbers()
'
' convert_list_numbers Macro
' Macro created 10/8/08 by WJ Shack
'
Selection.ConvertNumbersToText

End Sub
有什么建议吗?我会继续思考,但我相信,因为整个文档选项是如此简单,必须有一个简单的方法来做到这一点

ConvertNumbersToText方法对选择无效,但对List类有效,因此此子类将转换ActiveDocument中的每个列表:

ConvertNumbersToText方法对选择无效,但对List类有效,因此此子类将转换ActiveDocument中的每个列表:


如果您只想将标题转换为文本,则可以对整个文档执行此操作:

Sub ConvertHeadingNumbersToText()
    Dim paraCount As Integer
    paraCount = ActiveDocument.Paragraphs.Count
    Dim text As String
    Dim para As Paragraph
    ' process the headings bottoms up to preserve their original numbers
    For i = paraCount To 1 Step -1
        Set para = ActiveDocument.Paragraphs(i)
        If InStr(1, para.Style, "Heading") Then
            para.Range.ListFormat.ConvertNumbersToText
            text = para.Range.text   '  add a Watch for text so you can see progress in the Watches window
        End If
    Next i
End Sub

如果您只想将标题转换为文本,则可以对整个文档执行此操作:

Sub ConvertHeadingNumbersToText()
    Dim paraCount As Integer
    paraCount = ActiveDocument.Paragraphs.Count
    Dim text As String
    Dim para As Paragraph
    ' process the headings bottoms up to preserve their original numbers
    For i = paraCount To 1 Step -1
        Set para = ActiveDocument.Paragraphs(i)
        If InStr(1, para.Style, "Heading") Then
            para.Range.ListFormat.ConvertNumbersToText
            text = para.Range.text   '  add a Watch for text so you can see progress in the Watches window
        End If
    Next i
End Sub

今天我遇到了与OP完全相同的问题,并提出了一个简单的解决方案:

Sub Selection_Convert_List_Numbers()
    Selection.Range.ListFormat.ConvertNumbersToText
End Sub

今天我遇到了与OP完全相同的问题,并提出了一个简单的解决方案:

Sub Selection_Convert_List_Numbers()
    Selection.Range.ListFormat.ConvertNumbersToText
End Sub

运行这个程序仍然会将标题号更改为纯文本,因此,当我在其中添加新标题时,它从1开始。我看到您使用for循环遍历每个列表,因此每个列表是否都有唯一的标识符?所以我可以选择忽略标题中的那个?哈,如果这不起作用的话,我有300+要检查并手动重新编号:如果您添加MsgBox Lst.Range.Text,您可以看到每个列表包含的内容,并且您可以使用if逻辑来过滤您不想转换的内容。就我所知,这似乎是唯一的选择。注意:使用F8单步执行代码,这样您就不必关闭300多个对话框!这个^可以工作,但我将以相反的方式实现它,因为我想要更改为纯文本的每个编号要求都遵循完全相同的格式,因此我只能让它在遵循以下格式[A-Z][A-Z][0-9][0-9][0-9][-][0-9]的情况下更改为纯文本。。。我会在以后尝试运行它,它仍然会将我的标题号更改为纯文本,因此当我在其中添加新标题时,它从1开始。我看到您使用for循环遍历每个列表,因此每个列表是否都有唯一的标识符?所以我可以选择忽略标题中的那个?哈,如果这不起作用的话,我有300+要检查并手动重新编号:如果您添加MsgBox Lst.Range.Text,您可以看到每个列表包含的内容,并且您可以使用if逻辑来过滤您不想转换的内容。就我所知,这似乎是唯一的选择。注意:使用F8单步执行代码,这样您就不必关闭300多个对话框!这个^可以工作,但我将以相反的方式实现它,因为我想要更改为纯文本的每个编号要求都遵循完全相同的格式,因此我只能让它在遵循以下格式[A-Z][A-Z][0-9][0-9][0-9][-][0-9]的情况下更改为纯文本。。。我稍后会试试这个