【问题标题】:Documents.Add.Content.Paste - error 4198 in VBADocuments.Add.Content.Paste - VBA 中的错误 4198
【发布时间】:2017-08-23 23:09:58
【问题描述】:

我已经编写了一个应用程序,它复制了这个web page 中的所有文本,

我检查了剪贴板的内容两次。首先在复制网页的外部程序中,然后在从剪贴板粘贴文本时在 Word 中发生错误。

无论如何,我已经添加了等待的计时器,但这不是必需的,因为文本在剪贴板中 - 我确定。

 Dim BufObj As MSForms.DataObject, BufTxt As String
 Set BufObj = New MSForms.DataObject
 BufObj.GetFromClipboard
 BufTxt = BufObj.GetText ' I added BufTxt to watch panel

 Dim tmpStart
 tmpStart = Timer
 Do
    DoEvents
 Loop While (tmpStart + 1) > Timer

 Documents.Add.Content.Paste

在某些页面上,它可以工作并粘贴文本。但在这一点上它没有。调试器停在Documents.Add.Content.Paste行上

你知道如何解决这个问题吗?我见过这个link。哪里是删除链接的答案建议,但我找不到任何代码如何做到这一点。

编辑:

代码已更新,但错误仍然发生。我发现当调试器中断时,在我停止宏后,我无法从剪贴板(ctrl+v)粘贴数据。但是当我在调试器中检查时,BufTxt 包含文本。

【问题讨论】:

标签: vba ms-word paste


【解决方案1】:

试试这个测试代码。它从剪贴板插入文本 100 次。

没有使用粘贴功能,所以重新分页应该不会影响它(我猜)

Sub appendFromClip()

    Dim BufObj As MSForms.DataObject
    Set BufObj = New MSForms.DataObject   ' clipboard object

    Dim doc As Document
    Set doc = Documents.Add(DocumentType:=wdNewBlankDocument)

    Dim rng As Range
    Set rng = doc.Range                   ' whole document

    Dim i As Integer
    For i = 1 To 100                      ' test: repeat a bunch of text appends

        rng.Collapse wdCollapseEnd        ' collapse range into an insert point at end of document

        BufObj.GetFromClipboard
        rng = BufObj.GetText              ' note: rng becomes the range of the added text, so you have to collapse rng before adding more text

    Next i

End Sub

【讨论】:

  • 我已经测试过并且它有效。但问题是我需要表格留在文本中,因为我使用它来定位列中的内容。您的代码删除了表格。
  • 表格在剪贴板吗?
  • 是的。它是来自网页的表格。帖子已编辑。我发现当 makro 停止时,即使使用 ctrl+v 也无法从剪贴板粘贴数据。
【解决方案2】:

我发现删除第一个命令很简单

Documents.Add DocumentType:=wdNewBlankDocument

已解决问题。粘贴剪贴板时,我打开了两个窗口。删除后程序运行速度更快,没有错误发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多