Selection.style 应用于错误的段落(和其他问题)

Selection.style applied to wrong paragraph (and other issues)

我有多个文档来自同一个模板。它们每个都以章节编号开头,因此我可以构建一个包含所有这些内容的 table 内容。由于章节有小节和小节,我创建了一个名为 MyList 的多级列表样式。由于它们是不同的文件,所有列表都从 1 开始,我需要手动指定章节编号。

这可以通过在第一行写{LISTNUM MyList \l 1 \s x}来实现,x是章节号。我写了一个宏来提示输入章节号,插入一个回车return并应用一个新的段落样式来键入章节名称:

Chapter 1 (style: ChapNum)

Chapter name here (style: ChapName)

Normal text blah blah

我现在拥有的(工作)代码是:

Sub ChapterNumber()

Selection.Style = ActiveDocument.Styles("ChapNum")
ActiveWindow.View.ShowFieldCodes = True
Num = InputBox("Chapter number", "Random title")
SendKeys "^{F9}"
Selection.InsertBefore Text:="LISTNUM MyList \l 1 \s " + Num
SendKeys "%{F9}{RIGHT}{ENTER}"
End Sub

在我最终到达那里之前我遇到了一些问题,它们是:

我无法在使用 Selection.Style = ActiveDocument.Styles("ChapName") 的最后一个 Sendkeys 之后应用不同的段落样式,因为整个东西都转换为 ChapName 样式,而不仅仅是光标指向的段落。

我读过 Sendkeys 不是那么可靠所以,最初,我尝试了

而不是 SendKeys "%{F9}{RIGHT}{ENTER}"
ActiveWindow.View.ShowFieldCodes = False
Selection.EndKey Unit:=wdLine
Sendkeys "{ENTER}"

前两个命令都不行,我也不知道为什么;我在其他宏中使用过它们,从来没有遇到过任何问题。请您澄清一下好吗?请记住我对 vba 的了解非常有限。

谢谢。

将文本“章节”添加到您的模板并应用正确的样式。在其他两种必需的样式中添加空段落,您的模板已经设置好供您开始输入。然后所需要做的就是添加 LISTNUM 字段,可以如下所示完成。

Sub ChapterNumber()
    Dim Num As Long
    Num = InputBox("Chapter number", "Random title")
    Dim location As Range
    With ActiveDocument
        Set location = .Paragraphs(1).Range.Characters.Last
        location.Move wdCharacter, -1
        .Fields.Add Range:=location, Text:="LISTNUM MyList \l 1 \s " & Num
    End With
End Sub

根据评论进行编辑:

由于您似乎在模板中定义了编号样式,因此您确实需要添加 LISTNUM 字段。相反,您应该为附加到样式的列表模板设置起始编号。

Sub ChapterNumber()
    Dim Num As Long
    Num = InputBox("Chapter number", "Random title")
    ActiveDocument.Styles("ChapNum").ListTemplate.ListLevels(2).StartAt = Num
End Sub