Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel_visio_clipboard / 5 сообщений из 5, страница 1 из 1
12.08.2016, 13:25
    #39291033
alex_lipetsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel_visio_clipboard
Привет всем!
Есть косяк:
Макросом из Excel копируется участок в visio
Код: vbnet
1.
2.
3.
  xlBook3.Worksheets(4).Range("A5:c8").Copy
       'Selection.Copy
       visapp.ActiveWindow.Page.PasteSpecial 2, False, False 


Код в процедуре--процедура в цикле.
В рандомный цикл, получаем runtime error

Clipboard in used ....

Как бороться?
...
Рейтинг: 0 / 0
12.08.2016, 15:10
    #39291141
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel_visio_clipboard
alex_lipetsk,

Делать задержку межку копипастингами, либо обрабатывать ошибку (также ожидание освобождения буфера)
...
Рейтинг: 0 / 0
15.08.2016, 20:25
    #39292255
alex_lipetsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel_visio_clipboard
VSVLAD,
Поясни?
Что офис тупо не успевает?
тупо sleep(1000)?
ошибку ловить--она в разных возникает, но именно после копирования
...
Рейтинг: 0 / 0
15.08.2016, 20:51
    #39292262
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel_visio_clipboard
alex_lipetsk,

С буфером обмена не может работать одновременно 2 приложения. В один момент времени буфер обмена доступен только одному приложению.

alex_lipetskтупо sleep(1000)?
Пробуй. У меня в одном из проектов на VB.NET такая проблема возникала, пришлось написать кастомный класс для работы с буфером и приходилось так извращаться. При том данную практику замечал на нескольких форумах:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Public Function GetDataText() As String
        If workOperation Then Return String.Empty

        '//RDP
        rdpCompatible = IsRdpClipActive()

        workOperation = True
        dataText = String.Empty
        intDataTries = 0

       Do While intDataTries <= MAX_TRIES
            Try
                If Clipboard.ContainsText Then dataText = Clipboard.GetText()
                Exit Do
            Catch ex As ExternalException
                '//RDP
                If rdpCompatible Then KillRdpClip()

            intDataTries += 1
            Threading.Thread.Sleep(DELAY_BETWEEN_TRIES)
            End Try
        Loop

        '//RDP
        If rdpCompatible Then StartRdpClip()
        workOperation = False

        Return dataText
    End Function



Скорее всего в момент вставки, буфер обмена ещё не закрыт, а в него пытаюся новую порцию данных загрузить. Конечно всё это надо тестировать для вашего кейса. Попробуйте свой кастомный модуль для работы с буфером обмена и в нём уже обработку ошибок выполнять, если уж копипаста разрослать по всему коду.
...
Рейтинг: 0 / 0
17.08.2016, 17:11
    #39293441
alex_lipetsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel_visio_clipboard
VSVLAD,
Спасибо, буду тестить
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel_visio_clipboard / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]