首页 文章

如何使用VBA将样式应用于Word中的多个选择?

提问于
浏览
0

我创建了一个宏,它将特定样式应用于文档中选择的任何内容 . 但是,在草稿视图中,当用户单击样式区域窗格以选择段落然后按住Ctrl键单击其他段落时,运行此宏时不会应用此附加选择:

Sub BodyTextApply()
    Selection.Style = ActiveDocument.Styles("Body Text,bt")
End Sub

我还需要添加什么?注意:工作流程无法更改,以便用户在文档中选择实际文本;他们使用样式区域窗格设置...

工作流程如下:

alt text http://img6.imageshack.us/img6/1994/91231840.png

(不需要的)输出如下:

alt text http://img34.imageshack.us/img34/1239/outputt.png

1 回答

  • 3

    看起来你的风格“Body Text,bt”是纯粹的款式 . 这意味着它只会应用于一个完整的段落 .

    但是,在屏幕截图中,只选择了第二段的一部分 . 确保选中完整的段落,或者如果样式仅应用于段落的一部分,则使您的样式“Body Text,bt”成为链接(段落和字符)样式 .

    对不连续选择的编程访问非常有限,并且只能使用Word UI创建此类选择 . MSDN文章Limited programmatic access to Word discontiguous selections提供了一些更多细节 .

    如果仅将样式应用于段落的一部分(通过使其成为链接样式)不是您想要的,您可能需要提出这样的黑客:

    Sub BodyTextApply()
    
        Dim oRange As Range
    
        ' create a temporary character style
        ActiveDocument.Styles.Add "_TEMP_STYLE_", wdStyleTypeCharacter
    
        ' apply the temporary style to the discontiguous selection
        Selection.Style = ActiveDocument.Styles("_TEMP_STYLE_")
    
        Set oRange = ActiveDocument.Range
    
        With oRange.Find
            .ClearAllFuzzyOptions
            .ClearFormatting
            .ClearHitHighlight
            .Style = ActiveDocument.Styles("_TEMP_STYLE_")
            .Text = ""
            .Wrap = wdFindStop
    
            ' search for all occurences of the temporary style and format the
            ' complete paraphraph with the desired style
            Do While .Execute
                oRange.Paragraphs(1).Style = ActiveDocument.Styles("Body Text,bt")
            Loop
    
        End With
    
        ' cleanup
        ActiveDocument.Styles("_TEMP_STYLE_").Delete
    
    End Sub
    

    您可能还想添加一些错误处理,以确保最终从文档中删除使用的临时样式 .

相关问题