Я пишу скрипт для просмотра списка заказов и получения номеров заказов из выбора, удаления любых дубликатов и копирования его в буфер обмена.Однако в 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: GetFromClipboardOpenClipboard Failed "Я определил, что это результат того, что диапазон (" A1: A "и LASTROW) не удалось скопировать.Если есть решение для этого, которое не сильно замедляет код, я бы очень хотел знать.
РЕДАКТИРОВАТЬ: числа должны быть доступны в буфере обмена для вставки за пределы Excel, поэтому яневозможно вырезать буфер обмена из процесса.