Сохраняя данные в буфер обмена, используя .SetText, когда я пытаюсь вставить текст в другом месте, он пуст - PullRequest
0 голосов
/ 16 февраля 2019

Я отображаю список, из которого пользователь может выбирать строки.Затем код читает из ячеек электронной таблицы, связанных с этим элементом списка, и устанавливает количество текстовых переменных.Затем они объединяются и сохраняются в массив.

Наконец, массив считывается и строки копируются в буфер обмена.

Однако, когда я пытаюсь использовать CTRL-v для вставкизначения в электронном письме / текстовом файле, текст не вводится (буфер обмена кажется пустым).

Ниже приведен существенный код ...

NB.Код, основанный на трехстрочном выборе из списка

Dim LinesOfData() As String

'Other code that doesn't have direct relevance.. builds the strings

Set MyData = New DataObject

MyData.Clear

Dim record As Variant
Dim Indentifier As String

j = 0

For Each record In LinesOfData
    Indentifier = "FormatID" & CStr(j)
    Debug.Print record
    MyData.SetText record, Indentifier
    MyData.PutInClipboard
    MyData.GetFromClipboard
    '
    ' Test code only
    '
    If j = 0 Then                            'First pass, only 1 record to check
        S = MyData.GetText("FormatID0")
        Debug.Print S                        'Shows correct value
    ElseIf j = 1 Then                        '2nd pass, 2 records to check
        S = MyData.GetText("FormatID0")
        Debug.Print S                        'Shows correct value
        S = MyData.GetText("FormatID1")
        Debug.Print S                        'Shows correct value
    ElseIf j = 2 Then
        S = MyData.GetText("FormatID0")
        Debug.Print S                        'Shows correct value
        S = MyData.GetText("FormatID1")
        Debug.Print S                        'Shows correct value
        S = MyData.GetText("FormatID2")
        Debug.Print S                        'Shows correct value
    End If
    ' If I go and try to paste in another appl'n at this point, nothing!
    j = j + 1
Next record

' End code

Теперь не имеет значения, выходить ли я из конкретной пользовательской формы или из приложения, у меня все еще есть пустой буфер обмена (несмотря на то, что я могу прочитатьданные из буфера обмена в коде).

1 Ответ

0 голосов
/ 24 февраля 2019

Как и следовало ожидать, я продолжал искать asnwer, и я действительно нашел его.

Это ошибка Windows!

Очевидно, это происходит, когда у вас есть 2 или более окон Explorerоткрыть (начиная с Windows 8), и у меня было только то, что я все время тестировал.Однажды у меня было открыто только одно окно, альт!это сработало.

Не уверен, разрешено ли это.но вот нить, которая предупредила меня, с кодом для достижения результата с помощью вызовов API, предоставленных Debaser в конце поста.

https://chandoo.org/forum/threads/clipboard-copy-vba-code-not-working-in-windows-10.37126/

Надеюсь, другие найдутэто полезно.

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