powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel_visio_clipboard
5 сообщений из 5, страница 1 из 1
Excel_visio_clipboard
    #39291033
alex_lipetsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Есть косяк:
Макросом из 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
Excel_visio_clipboard
    #39291141
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lipetsk,

Делать задержку межку копипастингами, либо обрабатывать ошибку (также ожидание освобождения буфера)
...
Рейтинг: 0 / 0
Excel_visio_clipboard
    #39292255
alex_lipetsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,
Поясни?
Что офис тупо не успевает?
тупо sleep(1000)?
ошибку ловить--она в разных возникает, но именно после копирования
...
Рейтинг: 0 / 0
Excel_visio_clipboard
    #39292262
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excel_visio_clipboard
    #39293441
alex_lipetsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,
Спасибо, буду тестить
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel_visio_clipboard
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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