Я использую следующий код, чтобы скопировать текст в буфер обмена для последующей вставки пользователем:
Sub CopyText(ByVal StringToCopy As String)
Dim D As DataObject
Set D = New DataObject
With D
.SetText StringToCopy
.PutInClipboard
End With
Set D = Nothing
End Sub
На нескольких машинах он долго работал нормально. Он перестал работать в последние несколько месяцев. Вместо того, чтобы возвращать скопированный текст, он возвращает два неизвестных символа, которые отображаются как ??
в непосредственной панели, или символ 63, если я запускаю ?Asc(.GetText)
, что в соответствии с этот ответ означает, что текст не распознается. Строка теряется после .PutInClipboard
:
.SetText "Test"
Debug.Print .GetText `returns "Test"
.PutInClipboard
Debug.Print .GetText `returns "??"
Единственное найденное мной решение предлагает использовать вызовы API, чего я бы не хотел делать, если это возможно.
Редактировать: после отслеживания потока из msdn появляется сообщение о том, что проблема воспроизводится, если открыт Проводник.