MicrosoftWord2010下的VBA宏:生成标题提纲

编写本脚本的Office版本:Microsoft Office 2010

本段脚本,可以用来生成一个需求分析文档的提纲:

MicrosoftWord2010下的VBA宏:生成标题提纲_第1张图片

在上方的“视图→宏(最右边)→查看宏”中,创建一个宏,添加如下代码:

'宏名称:DemandAnalysis
'宏功能:生成需求分析模版
Sub DemandAnalysis()

    '设置标题自动编号
    SetNumber
    
    WriteTitle "需求分析文档"
     
    '引言
    WriteHeadline "引言", 1
    WriteWord "在这里输入正文"
    WriteHeadline "编写目的", 2
    WriteWord "在这里输入正文"
    WriteHeadline "项目风险", 2
    WriteWord "在这里输入正文"
    WriteHeadline "文档约定", 2
    WriteWord "在这里输入正文"
    WriteHeadline "预期读者和阅读建议", 2
    WriteWord "在这里输入正文"
    WriteHeadline "产品范围", 2
    WriteWord "在这里输入正文"
    WriteHeadline "参考文献", 2
    WriteWord "在这里输入正文"
     
    '综合描述
    WriteHeadline "综合描述", 1
    WriteWord "在这里输入正文"
    WriteHeadline "产品的状况", 2
    WriteWord "在这里输入正文"
    WriteHeadline "产品的功能", 2
    WriteWord "在这里输入正文"
    WriteHeadline "用户类和特性", 2
    WriteWord "在这里输入正文"
    WriteHeadline "运行环境", 3
    WriteWord "在这里输入正文"
    WriteHeadline "设计和实现上的限制", 3
    WriteWord "在这里输入正文"
    WriteHeadline "假设和约束", 3
    WriteWord "在这里输入正文"
     
    '外部接口需求
    WriteHeadline "外部接口需求", 1
    WriteWord "在这里输入正文"
    WriteHeadline "用户界面", 2
    WriteWord "在这里输入正文"
    WriteHeadline "硬件接口", 2
    WriteWord "在这里输入正文"
    WriteHeadline "软件接口", 2
    WriteWord "在这里输入正文"
    WriteHeadline "通讯接口", 2
    WriteWord "在这里输入正文"
     
    '系统功能需求
    WriteHeadline "系统功能需求", 1
    WriteWord "在这里输入正文"
    WriteHeadline "说明和优先级", 2
    WriteWord "在这里输入正文"
    WriteHeadline "激励/响应序列", 2
    WriteWord "在这里输入正文"
    WriteHeadline "输入/输出数据", 2
    WriteWord "在这里输入正文"
    
    '其他非功能需求
    WriteHeadline "其他非功能需求", 1
    WriteWord "在这里输入正文"
    WriteHeadline "性能需求", 2
    WriteWord "在这里输入正文"
    WriteHeadline "安全措施需求", 2
    WriteWord "在这里输入正文"
    WriteHeadline "安全性需求", 2
    WriteWord "在这里输入正文"
    WriteHeadline "软件质量属性", 2
    WriteWord "在这里输入正文"
    WriteHeadline "业务规则", 2
    WriteWord "在这里输入正文"
    WriteHeadline "用户文档", 2
    WriteWord "在这里输入正文"
    
    '词汇表
    WriteHeadline "词汇表", 1
    WriteWord "在这里输入正文"
    
    '数据定义
    WriteHeadline "数据定义", 1
    WriteWord "在这里输入正文"
    
    '分析模型
    WriteHeadline "分析模型", 1
    WriteWord "在这里输入正文"
    
    '待定问题列表
    WriteHeadline "待定问题列表", 1
    WriteWord "在这里输入正文"
    
    '附录
    'WriteHeadline "附录A", 1
    'WriteWord "在这里输入正文"
    
End Sub

'例程:设置标题自动编号
Sub SetNumber()

    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(1)
        .NumberFormat = "%1"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(0.76)
        .TabPosition = wdUndefined
        .ResetOnHigher = 0
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 1"
    End With
    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(2)
        .NumberFormat = "%1.%2"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(1.02)
        .TabPosition = wdUndefined
        .ResetOnHigher = 1
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 2"
    End With
    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(3)
        .NumberFormat = "%1.%2.%3"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(1.27)
        .TabPosition = wdUndefined
        .ResetOnHigher = 2
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 3"
    End With
    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(4)
        .NumberFormat = "%1.%2.%3.%4"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(1.52)
        .TabPosition = wdUndefined
        .ResetOnHigher = 3
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 4"
    End With
    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(5)
        .NumberFormat = "%1.%2.%3.%4.%5"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(1.78)
        .TabPosition = wdUndefined
        .ResetOnHigher = 4
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 5"
    End With
    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(6)
        .NumberFormat = "%1.%2.%3.%4.%5.%6"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(2.03)
        .TabPosition = wdUndefined
        .ResetOnHigher = 5
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 6"
    End With
    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(7)
        .NumberFormat = "%1.%2.%3.%4.%5.%6.%7"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(2.29)
        .TabPosition = wdUndefined
        .ResetOnHigher = 6
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 7"
    End With
    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(8)
        .NumberFormat = "%1.%2.%3.%4.%5.%6.%7.%8"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(2.54)
        .TabPosition = wdUndefined
        .ResetOnHigher = 7
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 8"
    End With
    With ListGalleries(wdOutlineNumberGallery).ListTemplates(1).ListLevels(9)
        .NumberFormat = "%1.%2.%3.%4.%5.%6.%7.%8.%9"
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(2.79)
        .TabPosition = wdUndefined
        .ResetOnHigher = 8
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = "标题 9"
    End With
        
End Sub

'例程:书写文章大标题
Sub WriteTitle(Word As String)

    Selection.Font.Name = "黑体"
    Selection.Font.Size = 24
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.TypeText Text:=Word
    Selection.TypeParagraph

End Sub

'例程:书写“标题 1”-“标题 6”
Sub WriteHeadline(Word As String, Level As Integer)

    Selection.Style = ActiveDocument.Styles("标题 " & Level)
    ActiveWindow.DocumentMap = True
    Selection.TypeText Text:=Word
    Selection.TypeParagraph

End Sub

'例程:书写正文
Sub WriteWord(Word As String)

    Selection.Font.Name = "宋体"
    Selection.Font.Size = 10.5
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    Selection.TypeText Text:="    " & Word '自然段前要加空格
    Selection.TypeParagraph
    
End Sub

'例程:清空全部文字(测试例程)
Sub Clean()
    
    Selection.WholeStory
    Selection.TypeBackspace
    
End Sub

运行后就可以生成一个自动编号标题的需求分析文档了

如果要把这段代码用于生成其他的文档标题提纲,只需要在例程(Sub)DemandAnalysis()中,调用如下的函数:

1)SetNumber:调用SetNumber例程,为标题自动编号。这个例程在开始调用且仅调用一次

2)WriteTitle:例程,用于撰写居中的标题,在该例程中可以设置标题的字体等样式

3)WriteHeadline:例程,撰写标题,第一个参数为标题的文字,第二个参数是一个数字,代表了标题的级别(1级标题字体最大)

4)WriteWord:例程,撰写正文

END

你可能感兴趣的:(word,Office,宏,VBA)