Documents.Add.Content.Paste - VBA中的错误4198

时间:2017-08-23 23:09:58

标签: vba ms-word paste

我编写的应用程序会复制此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包含了文本。

2 个答案:

答案 0 :(得分:0)

试试这个测试代码。它会从剪贴板中插入文本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

答案 1 :(得分:0)

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

var input = document.getElementById('input');
input.onkeydown = function(e) {
  console.log(input.value.length);
  if (input.value.length == 10) {
    if (e.keyCode === 8 || e.keyCode === 46) {
      return true;
    } else {
      return false;
    }
  }
}

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