我正在编写一个脚本来查看订单列表并从选择中获取订单号,删除任何重复项,然后将其复制到剪贴板。但是,我在大约 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
将允许在执行下一条语句之前处理任何挂起的消息。