【问题标题】:Modify and paste clipboard text修改和粘贴剪贴板文本
【发布时间】:2013-04-18 08:07:40
【问题描述】:

我的目标是:

  1. 将 PDF 中的文本复制到剪贴板
  2. 在一个移动中,将文本粘贴到 MS Word,同时
    • 用空格替换所有换行符
    • 匹配目标格式

我创建了一个宏,它将文档中的所有换行符替换为空格。

Selection.Find.Execute Replace:=wdReplaceAll
Selection.WholeStory
Selection.PasteAndFormat (wdFormatOriginalFormatting)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "^p"
    .Replacement.Text = " "
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With

如何将替换应用到剪贴板,然后粘贴这个替换的sn-p?

【问题讨论】:

  • 我承认我有点不明白 - 为什么要将剪贴板中的 ^p 替换为 " " 而不是将其粘贴到 Word。粘贴后您已经设法在文档中进行了... Word文档中的替换有问题吗?对不起,请帮我理解。
  • 1.我想用空格替换换行符,因为对于从 PDF 粘贴的文本中的每个换行符(自动换行符,如“此行中没有更多空间用于其他单词),MS word 会创建一个新段落,尽管它应该继续如果还有空格,则在同一行中。--- 2.当前宏替换粘贴剪贴板,然后用空格替换当前MS Word文档中的所有换行符,而不仅仅是在刚刚粘贴的文本中。---这样做更有意义?
  • 现在我知道了……给我一点时间来写出建议的答案

标签: vba ms-word paste


【解决方案1】:

我建议这样做:

  1. 记住要粘贴剪贴板数据的当前选择点
  2. 粘贴剪贴板中的内容
  3. 设置粘贴区域的结束点
  4. 仅对刚刚粘贴的文本范围进行替换。

以下解决方案部分基于问题中的代码。对(测试)必要的内容进行了评论。

Sub replacement_for_selection()

'Selection.Find.Execute Replace:=wdReplaceAll
'Selection.WholeStory

Dim rngFrom, rngTo
    rngFrom = Selection.Start
Selection.PasteAndFormat (wdFormatOriginalFormatting)
    rngTo = Selection.End
ActiveDocument.Range(rngFrom, rngTo).Select

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "^p"
    .Replacement.Text = " "
    .Forward = False    '!!!
    .Wrap = wdFindStop   '!!!
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute , , , , , , , , , , wdReplaceAll
End Sub

【讨论】:

    【解决方案2】:

    它也对我有用,但我对其进行了改进,添加了一个命令来消除双空格:

    Sub KM()
    '
    ' KM Macro
    ' Paste and eliminate line breaks and double spaces.
    '
    'Selection.Find.Execute Replace:=wdReplaceAll
    'Selection.WholeStory
    
    Dim rngFrom, rngTo
        rngFrom = Selection.Start
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
        rngTo = Selection.End
    ActiveDocument.Range(rngFrom, rngTo).Select
    
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "^p"
        .Replacement.Text = " "
        .Forward = False    '!!!
        .Wrap = wdFindStop   '!!!
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute , , , , , , , , , , wdReplaceAll
    
    Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "  "
            .Replacement.Text = " "
            .Forward = False
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
        Selection.Find.Execute Replace:=wdReplaceAll
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      相关资源
      最近更新 更多