选择并格式化Word中的粘贴文章

时间:2018-11-15 07:49:44

标签: vba ms-word word-vba

在很多情况下,我不得不从网页上复制文章,以某种方式粘贴到单词并设置格式。我有这段代码可以自动粘贴和格式化。但是,它只能运行一次,并且以后不会更改粘贴的文章的字体。

Sub Macro1()

    Dim artic As Word.Range
    Set artic = Selection.Range
         'keep bold word bold and avoid paragraphs to cluster into one 
    artic.PasteAndFormat (wdFormatOriginalFormatting)
         'paste and select pasted article
    artic.Select
    artic.Font.Name = "Calibri"
    artic.Font.Size = 10.5
    artic.Font.Italic = False
    artic.ParagraphFormat.Alignment = wdAlignParagraphLeft

End Sub

1 个答案:

答案 0 :(得分:0)

如果您在artic.Font.Name = "Calibri"处设置断点,以使代码在artic.Select之后停止,则会看到Paste方法包含粘贴的内容。通常,artic将位于粘贴内容的开头。

这意味着代码需要能够在粘贴之前紧接所选内容之后找到位置。这也取决于粘贴是否出现在文档的末尾。

以下示例代码在我的测试中为我工作。它使用两个Ranges:一个用于粘贴内容,另一个用于粘贴后的结束位置。

(响应要求对Word对象模型进行更多说明):将Range对象看作一个选择,区别在于可以有许多Range对象,但是只有一个Selection。操纵Range时,通常可以想到使用键盘来缩小或扩展它。按向左或向右箭头键会将选择“折叠”到插入点;按住Shift并按这些键将扩大/缩小选择范围;在文档中其他地方单击时按住Shift键也可以做到这一点。可以考虑将Range.StartRange.End设置为最后一个。范围的起点或终点被任意设置为文档中的另一个位置。

对于以下代码中的第一个If,Range会被缩小/折叠到起点(请考虑向左箭头键),然后向右移一个字符(请向右箭头键) )。这使它超出了粘贴新材料的位置,因此将粘贴点的末端扩展到此Range的起点将拾取两者之间的所有内容。

Sub TestPasteAndSelect()
    Dim artic As Word.Range, rng As Word.Range
    Dim bNotAtEnd As Boolean

    Set artic = Selection.Range
    Set rng = artic.Duplicate
    rng.End = ActiveDocument.content.End
    If rng.Characters.Count > 1 Then
        'selection is not at end of document
        rng.Collapse wdCollapseStart
        rng.MoveStart wdCharacter, 1
        bNotAtEnd = True
    End If
         'keep bold word bold and avoid paragraphs to cluster into one
    artic.PasteAndFormat (wdFormatOriginalFormatting)
         'paste and select pasted article

    'artic.Select
    'rng.Select
    If bNotAtEnd Then
        artic.End = rng.Start
    Else
        Set artic = rng.Duplicate
    End If
    artic.Font.Name = "Calibri"
    artic.Font.Size = 10.5
    artic.Font.Italic = False
    artic.ParagraphFormat.Alignment = wdAlignParagraphLeft
End Sub