.Copy不是随机执行的

时间:2019-06-18 20:13:25

标签: excel vba

我正在编写一个脚本,以查看订单列表,并从选择中获取订单编号,删除所有重复项,然后将其复制到剪贴板。但是,我大约有75%的时间出错,并确定这是由于Range.Copy行不起作用造成的。

我添加了一个application.wait行,该行可解决此问题,但是代码现在非常慢。我想知道是否有更快的解决方案。

'Copies unique values in selection (one column only)
    Selection.Copy
    '(copies the list of numbers I've already selected earlier in the code)
    Set TEMPWB = Workbooks.Add
    Set TEMPWS = TEMPWB.Sheets("Sheet1")
    TEMPWS.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    With TEMPWS
        .Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
        LASTROW = .Range("A" & Rows.Count).End(xlUp).Row
        '.Application.Wait (Now + TimeValue("0:00:01"))
        '^--the delay I added, v--the copy code that isn't working
        .Range("A1:A" & LASTROW).Copy
    End With
    TEMPWB.Close SaveChanges:=False

'Wrap up
    CBDATA.GetFromClipboard
    'CBDATA is Dimmed as a New MSForms.DataObject
    CBCONTENTS = CBDATA.GetText

在没有延迟的情况下运行脚本时,通常会收到以下消息:“运行时错误'-2147221040(800401d0)':DataObject:GetFromClipboard OpenClipboard失败” 我确定这是range(“ A1:A”&LASTROW)无法复制的结果。如果有解决方案不会降低代码的速度,我真的很想知道。

编辑:剪贴板中的数字必须可用才能粘贴到Excel之外,因此我不能将剪贴板从流程中删除。

1 个答案:

答案 0 :(得分:1)

尝试在对DoEvents的调用之后添加Range.Copy-大概在消息泵中正在发生某种竞争情况; DoEvents将允许在执行下一条语句之前处理所有待处理的消息。

相关问题