Копия не выполняется случайно - PullRequest
2 голосов
/ 18 июня 2019

Я пишу скрипт для просмотра списка заказов и получения номеров заказов из выбора, удаления любых дубликатов и копирования его в буфер обмена.Однако в 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, поэтому яневозможно вырезать буфер обмена из процесса.

1 Ответ

1 голос
/ 18 июня 2019

Попробуйте добавить DoEvents после вызова на Range.Copy - возможно, в насосе сообщений происходит какое-то состояние гонки;DoEvents разрешит обработку любых ожидающих сообщений до выполнения следующего оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...