我正在编写一个脚本,以查看订单列表,并从选择中获取订单编号,删除所有重复项,然后将其复制到剪贴板。但是,我大约有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之外,因此我不能将剪贴板从流程中删除。
答案 0 :(得分:1)
尝试在对DoEvents
的调用之后添加Range.Copy
-大概在消息泵中正在发生某种竞争情况; DoEvents
将允许在执行下一条语句之前处理所有待处理的消息。