在很多情况下,我不得不从网页上复制文章,以某种方式粘贴到单词并设置格式。我有这段代码可以自动粘贴和格式化。但是,它只能运行一次,并且以后不会更改粘贴的文章的字体。
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
答案 0 :(得分:0)
如果您在artic.Font.Name = "Calibri"
处设置断点,以使代码在artic.Select
之后停止,则会看到Paste
方法不包含粘贴的内容。通常,artic
将位于粘贴内容的开头。
这意味着代码需要能够在粘贴之前紧接所选内容之后找到位置。这也取决于粘贴是否出现在文档的末尾。
以下示例代码在我的测试中为我工作。它使用两个Ranges
:一个用于粘贴内容,另一个用于粘贴后的结束位置。
(响应要求对Word对象模型进行更多说明):将Range
对象看作一个选择,区别在于可以有许多Range对象,但是只有一个Selection。操纵Range
时,通常可以想到使用键盘来缩小或扩展它。按向左或向右箭头键会将选择“折叠”到插入点;按住Shift并按这些键将扩大/缩小选择范围;在文档中其他地方单击时按住Shift键也可以做到这一点。可以考虑将Range.Start
或Range.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