.复制不是随机执行的



我正在编写一个脚本来查看订单列表并从选择中获取订单号,删除任何重复项,然后将其复制到剪贴板。但是,我在大约 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(':数据对象:GetFrom剪贴板打开剪贴板失败"我已经确定这是范围("A1:A"和LASTROW(无法复制的结果。如果有一个解决方案不会减慢代码速度,我真的很想知道。

编辑:数字需要在剪贴板中可用,以便在Excel之外粘贴,所以我无法将剪贴板从过程中剪切出来。

尝试在

调用Range.Copy后添加DoEvents - 大概消息泵中存在某种竞争条件; DoEvents将允许在执行下一条语句之前处理任何挂起的消息。

最新更新