Ошибка при вызове openclipboard vba

Перейти к контенту

Добрый день!  

  Есть парсер, который вызывается n-ное кол-во раз из другой фунции:  

  Dim oIE As Object  
Dim oSheet As Excel.Worksheet  
Dim jjj As DataObject  
Dim wb As Workbook  
Set wb = Workbooks(«fs_pars.xlsm»)  
Set jjj = New DataObject  
Set oIE = CreateObject(«internetexplorer.application»)  
oIE.Navigate «с:temp» & page_s & «index.html»  
Do While (oIE.ReadyState <> 4)  
Loop  
oIE.Visible = 0  
jjj.SetText oIE.document.Body.innertext  
jjj.PutInClipboard  
Application.DisplayAlerts = False  
Set oSheet = wb.Worksheets.add()  
oSheet.Name = «Temp»  
wb.Worksheets(«Temp»).Activate  
wb.Worksheets(«Temp»).Cells.NumberFormat = «@»  
wb.Worksheets(«Temp»).Cells(1, 1).Select  
wb.Worksheets(«Temp»).Paste  
Set jjj = Nothing  
oIE.Quit  
Set oIE = Nothing  
If page_s = «» Then page_s = «1»  
End Sub  

  Он работает, но переодически выдаёт ошибку на строчке jjj.PutInClipboard:  
Run-time error ‘-2147221040(800401d0)’:  
DataObject:PutInClipboard Ошибка при вызове OpenClipboard  

  Подскажите в чём ошибка пожалуйста!

Hi All,

I am posting this problem upon reviewing many forums with regard to this issue with no avail, hence decided to post a question with expectation to hear from an expert in this field. The issue I’m facing is listed below.

I have developed an Excel 2007 application containing VBA Macros to perform an automation. The automated workbook reads many data files in order to extract data out of them (for instance 20 files). The extracted data is run over a series of calculations
which result in populating sheets of structured data and a number of charts. Upon the end of the process the workbook prints several PDF outputs (i.e. using Excels PDF addin) and completes a single run.

The problem arises at the below code segment when I run the workbook two or more times, where at the PDF print stage it gives me a run time error saying «Run-Time Error: Document not saved. The document must be open, or an error may have been encountered
when saving». However none of the PDFs generated at the first run are never opened.

RMV_ReportsWS.ExportAsFixedFormat Type:=xlTypePDF, fileName:=filePathAndName, Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Upon stopping the debugger and trying to manually copy any text in the VB Editor window throws an «Out Of Memory» warning message and when I try to copy any data from any of the worksheets in the workbook it throws a «Cannot Open Clipboard» warning
message. It is to note that the workbook completes fully at its first run
and subsequent runs causing the above mentioned issues. 

I assume this is a matter with the clipboard however I am unable to resolve the issue. I have used the following code at each point of the code to ensure clipboard cleanup but even this does not seem to address the problem

Option Explicit
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
 
Public Function ClearClipboard()
  If OpenClipboard(Application.hwnd) = 0 Then
   ClearClipboard = False
  Else
   EmptyClipboard
   CloseClipboard
   ClearClipboard = True
  End If
End Function

As for the specs I currently run the workbook on a Windows 7 32bit, with 2GB RAM in Excel 2007 SP2.

I would really appreciate feedback from as it is a very frustrating situation.

Thank You and Best Regards,
Praneeth


Praneeth Wickramasinghe

  • #1

Hello,

I’ve been using a certain subroutine to copy and paste the values of particular cells from Excel into a different program, and until recently this has been working fantastically. But now, all of a sudden, when I try to run this sub on certain cells, I get this error: «-2147221040 (800401D0) — OpenClipboard Failed». I call the copy-and-paste sub on a lot of different cells in various macros, but for some reason the error is always thrown on the third line:

Code:

Public Sub VeryFirstPartOfOneOfMySubs(
    CP ("$CB$3")  'This works fine
    Sleep (100)
    CP ("$BA$16") 'The error shows up here
    Sleep (50)
    ...
End Sub

I don’t think it’s an issue of increasing the sleep time, because it’s never needed it in the past. Here’s the derivative sub («CP», short for «copy-paste»):

Code:

Private Sub CP(Rnge As String)
    Dim MyData As New MSForms.DataObject
    MyData.SetText Range(Rnge).Value
    MyData.PutInClipboard  'The error shows up here
    RC  'Short for "right-click"; simulates a right-click in another app to paste
    Sleep (50)
End Sub

The only thing I can think of is that something I changed in another macro somewhere could be conflicting with normal clipboard functioning — but I don’t know why that would be. The main thing I changed was that I went from manual macro calling (clicking on the ribbon) to a visual, checkbox-and-button based interface.

Also, as another fun fact, the cells the copy-paste sub throws an error on almost always end up getting deleted (presumably by the sub itself). That’s also never happened before, and I don’t understand why an error like that would only just manifest itself now.

Thanks for any insight you might be able to provide.

Last edited: Feb 22, 2011

Which came first: VisiCalc or Lotus 1-2-3?

Dan Bricklin and Bob Frankston debuted VisiCalc in 1979 as a Visible Calculator. Lotus 1-2-3 debuted in the early 1980’s, from Mitch Kapor.

  • #2

here is a snip of code I use to copy to the clipboard, this can then be copied to anything outside of excel and inserted with control V or paste

Dim myData As DataObject

Set myData = New DataObject
myData.SetText «calendar alert added my outlook»
myData.PutInClipboard

you may need the reference to dataobject, which from memory is automatic if you start a new project and insert a userform, and then delete the project, unless of course you wish to use the form, this will load the references for Microsoft Dataobject V 2.0

  • #3

Thanks for your reply. Unfortunately, if you’ll look up in the second code block, that’s almost exactly the code I used, which is giving me problems. The «MyData.putinclipboard» command, specifically.

  • #4

Thanks for your reply. Unfortunately, if you’ll look up in the second code block, that’s almost exactly the code I used, which is giving me problems. The «MyData.putinclipboard» command, specifically.

I also have had routines that once worked fine no longer do, with a strange twist. Here’s an example:

Function RangeToText(r As Range) As String
Set MyData = New MSForms.DataObject
r.Copy
MyData.GetFromClipboard
RangeToText = MyData.GetText
Set MyData = Nothing
End Function

The procedure stops at the red line and displays the «OpenClipboard Failed» popup. If I then press Debug and then F5 (VBA Run), it works just fine!

Until the next time, that is. Restarting Excel and/or Windows 7 does not help. I’m at wits end on this.

Thanks for any help.

  • #5

I also have had routines that once worked fine no longer do, with a strange twist. Here’s an example:

Function RangeToText(r As Range) As String
Set MyData = New MSForms.DataObject
r.Copy
MyData.GetFromClipboard
RangeToText = MyData.GetText
Set MyData = Nothing
End Function

The procedure stops at the red line and displays the «OpenClipboard Failed» popup. If I then press Debug and then F5 (VBA Run), it works just fine!

Until the next time, that is. Restarting Excel and/or Windows 7 does not help. I’m at wits end on this.

Thanks for any help.

I’m having the same problem with similar code. Also, When pasting, I’d like to keep my default signature, not overwrite it.
Here’s the relevant snippet of my code:

Code:

Dim strPaste  As Variant
Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

strPaste = DataObj.GetText(1)
    
    With OutMail
        .To = Email 'extracted from excel
        .BCC = "name@place.com"
        .Subject = Subj 'extracted from other level of code
        .BodyFormat = 2 '1=Plain text, 2=HTML 3=RichText
        .Body = strPaste
        .Display
    End With

Please help

Last edited: Jun 24, 2014

I have a simple WPF app which creates a Thread, polls the clipboard every second and trims any strings it finds

However, in the background thread, once the string content changes, the clipboard methods fail with the exception

OpenClipboard Failed (Exception from HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN))

Example: I have «ABC» on my clipboard and launch the app. A messagebox will popup with the string ABC. Now I copy a string «DEF» and instead of a message box popping up, the application crashes with the above error

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Thread t = new Thread(new ThreadStart(cleanStr));
            t.SetApartmentState(ApartmentState.STA);
            t.Start();
        }
        void cleanStr()
        {
            string prevStr = "";
            int err = 0;
            while (true)
            {
                    if (Clipboard.ContainsText() && !prevStr.Equals(Clipboard.GetText()))
                    {
                        prevStr = Clipboard.GetText();
                        prevStr=prevStr.Trim();
                        Clipboard.SetText(prevStr);
                        MessageBox.Show(prevStr);
                        Thread.Sleep(1000);
                    }
            }
        }

Код C#:

TextBox TBH2 = new TextBox();
TBH2.Text = "qqq"
Clipboard.Clear();
TBH2.SelectAll();
TBH2.Copy();

Clipboard.clear() выкидывает исключение COMExeption
ошибка при вызове OpenClipboard(Исключение из HRESULT: 0x800401D0(CLIPBRD_E_CANT_OPEN))»

Получается Clipboard занят другим процессом и удается до него достучаться.
Пробовал подождать, пока буфер не освободится, не помогает.

private void textCopyClipboard(TextBox textBox)
{              
  for (int i = 0; i < 100;i++)
  {
     try
     {
        Clipboard.Clear();
        textBox.SelectAll();
        textBox.Copy();                      
        return;
     }
     catch (Exception ex)
     {
        System.Threading.Thread.Sleep(100);
     }
  }
}

Подскажите плиз, как можно побороть эту проблему.

23.09.09 00:25: Перенесено модератором из ‘.NET’ — TK

Здравствуйте, Кирилл Осенков, Вы писали:

КО>[STAThread] на точке входа стоит?

WPF по умолчанию выполняется в [STAThread].

А>WPF по умолчанию выполняется в [STAThread].
Прошу прощения, коллега, мой телепатический модуль сейчас в ремонте. Без него мне неясно, используется ли в исходном сообщении WinForms или WPF.

Кроме того можно посоветовать привести полный mixed-mode call stack для главного потока с загруженными символами. Интересно, что происходит в native code frames, может поймать native first chance exception до того, как оно HRESULT вернёт и отмотает стек.

Здравствуйте, serjik007, Вы писали:

S>ошибка при вызове OpenClipboard(Исключение из HRESULT: 0x800401D0(CLIPBRD_E_CANT_OPEN))»


S>Получается Clipboard занят другим процессом и удается до него достучаться.

S>Пробовал подождать, пока буфер не освободится, не помогает.

S>Подскажите плиз, как можно побороть эту проблему.

Код твой вставил в WPF приложение прямо в конструктор Windows1, где он и сработал без проблем. Дело не в коде. Судя по всему , у тебя что-то именно с клипбоард не то. Проверь работу ее вручную, то есть забрось туда какой-нибудь текст и убедись, что он там есть.

Если некоторое приложение вызвало OpenClipboard и не вызвало CloseClipboard, clipboard будет недоступна всем другим приложениям.

I installed Microsoft Visio 2010 Beta.

While editing a UML static structure, I selected a couple of shapes, copied, and pasted them. The copy-and-paste generated the error «OpenClipboard Failed».

After that, the properties of any shape won’t come up any more, and I can’t quit Visio (when I try to quit: «You cannot quit Visio because a program is handling an event from Visio. If VBA is at a breakpoint, reset VBA, then quit.»)

After this error occurred once, it occurred over and over again. I quit Visio throught he Task manager and started it again. But even in the newly started process, copy-and-paste wouldn’t work any more and would always result in the same error.

This makes Visio unusable for me.

Apparently, this error has been there for a while.
There is a discussion from 2004 about this bug here  http://www.dotnet247.com/247reference/msgs/42/214420.aspx.
Someone called Wei-Dong Xu, Microsoft Product Support Services, said that the bug was being worked on.

This was 6 years ago, why is it still not fixed?

Добрый день!  

  Есть парсер, который вызывается n-ное кол-во раз из другой фунции:  

  Dim oIE As Object  
Dim oSheet As Excel.Worksheet  
Dim jjj As DataObject  
Dim wb As Workbook  
Set wb = Workbooks(«fs_pars.xlsm»)  
Set jjj = New DataObject  
Set oIE = CreateObject(«internetexplorer.application»)  
oIE.Navigate «с:temp» & page_s & «index.html»  
Do While (oIE.ReadyState <> 4)  
Loop  
oIE.Visible = 0  
jjj.SetText oIE.document.Body.innertext  
jjj.PutInClipboard  
Application.DisplayAlerts = False  
Set oSheet = wb.Worksheets.add()  
oSheet.Name = «Temp»  
wb.Worksheets(«Temp»).Activate  
wb.Worksheets(«Temp»).Cells.NumberFormat = «@»  
wb.Worksheets(«Temp»).Cells(1, 1).Select  
wb.Worksheets(«Temp»).Paste  
Set jjj = Nothing  
oIE.Quit  
Set oIE = Nothing  
If page_s = «» Then page_s = «1»  
End Sub  

  Он работает, но переодически выдаёт ошибку на строчке jjj.PutInClipboard:  
Run-time error ‘-2147221040(800401d0)’:  
DataObject:PutInClipboard Ошибка при вызове OpenClipboard  

  Подскажите в чём ошибка пожалуйста!

  • #1

Hello,

I’ve been using a certain subroutine to copy and paste the values of particular cells from Excel into a different program, and until recently this has been working fantastically. But now, all of a sudden, when I try to run this sub on certain cells, I get this error: «-2147221040 (800401D0) — OpenClipboard Failed». I call the copy-and-paste sub on a lot of different cells in various macros, but for some reason the error is always thrown on the third line:

Code:

Public Sub VeryFirstPartOfOneOfMySubs(
    CP ("$CB$3")  'This works fine
    Sleep (100)
    CP ("$BA$16") 'The error shows up here
    Sleep (50)
    ...
End Sub

I don’t think it’s an issue of increasing the sleep time, because it’s never needed it in the past. Here’s the derivative sub («CP», short for «copy-paste»):

Code:

Private Sub CP(Rnge As String)
    Dim MyData As New MSForms.DataObject
    MyData.SetText Range(Rnge).Value
    MyData.PutInClipboard  'The error shows up here
    RC  'Short for "right-click"; simulates a right-click in another app to paste
    Sleep (50)
End Sub

The only thing I can think of is that something I changed in another macro somewhere could be conflicting with normal clipboard functioning — but I don’t know why that would be. The main thing I changed was that I went from manual macro calling (clicking on the ribbon) to a visual, checkbox-and-button based interface.

Also, as another fun fact, the cells the copy-paste sub throws an error on almost always end up getting deleted (presumably by the sub itself). That’s also never happened before, and I don’t understand why an error like that would only just manifest itself now.

Thanks for any insight you might be able to provide.

Last edited: Feb 22, 2011

What does custom number format of ;;; mean?

Three semi-colons will hide the value in the cell. Although most people use white font instead.

  • #2

here is a snip of code I use to copy to the clipboard, this can then be copied to anything outside of excel and inserted with control V or paste

Dim myData As DataObject

Set myData = New DataObject
myData.SetText «calendar alert added my outlook»
myData.PutInClipboard

you may need the reference to dataobject, which from memory is automatic if you start a new project and insert a userform, and then delete the project, unless of course you wish to use the form, this will load the references for Microsoft Dataobject V 2.0

  • #3

Thanks for your reply. Unfortunately, if you’ll look up in the second code block, that’s almost exactly the code I used, which is giving me problems. The «MyData.putinclipboard» command, specifically.

  • #4

Thanks for your reply. Unfortunately, if you’ll look up in the second code block, that’s almost exactly the code I used, which is giving me problems. The «MyData.putinclipboard» command, specifically.

I also have had routines that once worked fine no longer do, with a strange twist. Here’s an example:

Function RangeToText(r As Range) As String
Set MyData = New MSForms.DataObject
r.Copy
MyData.GetFromClipboard
RangeToText = MyData.GetText
Set MyData = Nothing
End Function

The procedure stops at the red line and displays the «OpenClipboard Failed» popup. If I then press Debug and then F5 (VBA Run), it works just fine!

Until the next time, that is. Restarting Excel and/or Windows 7 does not help. I’m at wits end on this.

Thanks for any help.

  • #5

I also have had routines that once worked fine no longer do, with a strange twist. Here’s an example:

Function RangeToText(r As Range) As String
Set MyData = New MSForms.DataObject
r.Copy
MyData.GetFromClipboard
RangeToText = MyData.GetText
Set MyData = Nothing
End Function

The procedure stops at the red line and displays the «OpenClipboard Failed» popup. If I then press Debug and then F5 (VBA Run), it works just fine!

Until the next time, that is. Restarting Excel and/or Windows 7 does not help. I’m at wits end on this.

Thanks for any help.

I’m having the same problem with similar code. Also, When pasting, I’d like to keep my default signature, not overwrite it.
Here’s the relevant snippet of my code:

Code:

Dim strPaste  As Variant
Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

strPaste = DataObj.GetText(1)
    
    With OutMail
        .To = Email 'extracted from excel
        .BCC = "name@place.com"
        .Subject = Subj 'extracted from other level of code
        .BodyFormat = 2 '1=Plain text, 2=HTML 3=RichText
        .Body = strPaste
        .Display
    End With

Please help

Last edited: Jun 24, 2014

Peter_SSs

Пишите свои мнения о программах, расширяющих возможности буфера обмена:
— плюсы/минусы
— потребление памяти
— глюки (обязательно подробности, а не просто она глючная!!)
— удобство для тех или иных применений (укажите, каких)
Сравнивайте разные программы, указывая критерии (не забудьте, что они, как и потребности, у всех индивидуальны), или просто кратко сообщайте о новой программе ( ссылка и описание — обязательно)

CLCLвнешне простая, но весьма функциональная и настраиваемая: плагины, настройка горячих клавиш, фильтр запоминаемых форматов (например, только текст или картинки). Бесплатна и с открытым кодом. Тема в программах
ClipX — по стилю работы напоминает CLCL, но ещё проще и меньше, лучше настраиваются клавиши, хранит картинки, удобный фильтр-поиск. Тема в программах
Clibor — компактный по размеру, портативный менеджер от японских производителей. Поддерживает FIFO/LIFO, Unicode, инкрементный поиск, пароль при запуске и многое другое Доступны переводы версии 1.4.9 и Русская сборка 1.4.9
ClipDiary — простой, но продуманный и вполне достаточный большинству буфер.
ClipCache Pro — навороченный буфер. Редактирование, фильтры, информация источника и т.д.
ClipAngel — удобный фильтр, поддержка отображения HTML, RTF, TXT, картинок, списков файлов, редактирование TXT, много операций над клипами и их файлами, горячие клавиши, любимые клипы, эмуляция ввода, сравнение клипов, информация об источнике клипа (заголовок окна, приложение, URL). Бесплатна и с открытым кодом.
Ditto
CopyQ — очень интересный менеджер буфера обмена с большими возможностями. Приложение работает под Linux и Windows.
ClipJump — опенсорсная, на базе знаменитого интерпретатора скриптов AutoHotkey. В целом неплохая, быстрая, лёгкая, довольно функциональная. Подробнее.
ClipboardFusion — авто-форматирование или удаление форматирования, редактирование текста в буфере (авто-удаление символов, пробелов, переводов каретки, табуляций в начале и конце клипа). Поддержка макросов, своих или готовых с офсайта. Тема в варезнике .
ClipMate
ArsClip
Swift Paste — подробнее
Ethervane Echo — Бесплатный. Русского языка нет. Копируемые данные автоматически сортируются и раскидываются по заранее созданным вкладкам. Настройки гибкие, но неудобные.
Spartan
AccelClip — Ссылка на загрузку

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ради интереса и расширения кругозора поюзал пару дней Swift Paste. За это время она раз 5 самопроизвольно «отвалилась» (перестала следить за буфером обмена), приходилось подключать вручную командой [Re-Monitor Clipboard].
Также несколько раз (вне связи с первой проблемой) главное меню теряло атрибут «Поверх всех окон», приходилось его вытаскивать вручную.

Кроме того, выяснилось, что эта полоска у верхнего края дисплея очень сильно мешает работать, куда её ни приткнёшь: заслоняет полезную информацию в заголовках окон приложений. А возможности сделать её отчасти прозрачной не предусмотрено. Расположить эту полоску у левого или правого края дисплея вертикально (как, например, у ArsClip) тоже не предусмотрено.

Единственный разумный вариант: использовать опцию [Auto-hide menu bar]. Но в этом случае приходится прилагать дополнительные усилия и тратить секунды, чтобы сначала достать эту полоску из скрытого состояния. Было бы логично сделать, чтобы меню автоматически вываливались при наведении указателя мыши (без необходимости кликать левой кнопкой), но и такой возможности тоже не предусмотрено

Я что-то упустил?

Добавлено:
В качестве (единственного??) положительного момента (дабы не обвинили в необъективности) : Swift Paste является одним из немногих менеджеров буфера обмена, которые при вызове своего списка клипов не перехватывают фокус ввода. Это позволяет использовать их для вставки в такие специфические места, как, например, окно переименования файла в Windows’ Explorer, Total Commander и пр. (большинство буферных утилит для этого не годятся, так как при вызове списка клипов модальное окно переименования файла автоматически закрывается.)

За буфером обмена следить не прекращала (факт не 100%, мог не обратить внимания).
Поверх всех окон не делал, у меня включено автоскрытие (без него, действительно, мешает).
Ну а так, в целом, согласен. Но я и не думаю её использовать как основной МБО, основной и любимый у меня ClipCachePro. Так, в определённых ситуациях удобна. В автозапуске она у меня тоже не постоянно, потестирую ещё, да уберу, оставлю только ярлык в нужном месте для быстрого доступа.
P. S. А вообще — понравилась прога больше всех прочих МБО, за исключением ClipCachePro, который тоже не без минусов.
P. P. S. Добавил в шапку

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ребята, подскажите пожалуйста, какие из ваших утилит могут обрабатывать текст в буфере по заданному юзером произвольному шаблону? Например, заменить в тексте все буквы «а» на буквы «щ»: копируем в память текст «абракадабра», оно там обрабатывается — и потом возвращает нам слово «щбрщкщдщбщ» Или заключить текст в скобки: копируем «абракадабра», получаем [абракадабра]. И так далее.

Многие из программ, перечисленных в шапке, умеют изменять регистр текста в буфере или удалять символ > в начале строки (ClipCache, CLCL и другие). Но мне нужна именно возможность задать мой собственный произвольный шаблон.

Можете что-то посоветовать?

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Any_utka
Я не уверен на 100%, но посмотрите help к программе ClipJump, где-то, вроде что-то было. (ссылки стрраничкой раньше)
Кстати, про ClipJump.. Обнаружились пара косяков..
1. Мож чего не понимаю, но программа при запуске предупреждает, что для корректной работы необходим запуск от имени Администратора, хотя сама при активации пункта меню «Options-Run at startup «просто добавляет ярлык в папку » Startup» без активации опции «запускать как администратор».
2. Не знаю, что не так с моей системой, но каждые 3-4 дня начинает при запуске вылетать с ощибкой «target label does not exist».
oshizelly

Есть такое. А еще с ним у меня один нужный vbs не работает. Пишет: Ошибка при вызове OpenClipboard
Точне проблема с компилированным в exe vbs. С другими клипборд менеджерами такой ошибки нет.

Добавлено:
Также с ClipJump не работает Опечатка v 2.711 (snoop2).

ClipJump
Также, если навскидку, то:
VirtAssist
Clipboard Master (тяжёлый, грузит в системный реестр сотни!! своих ключей, как какой-нибудь MS Office, но в портабельном варианте можно юзать)
Typing Assistant (это вообще-то не менеджер буфера обмена, но у него есть также некоторый функционал)

Вроде была ещё парочка, если очень надо, могу попробовать припомнить. Или пускай коллективный разум тоже примет участие в викторине

Добавлено:
vadim3sh 23:40 13-05-2014
Цитата:

Openclipboard Failed

Openclipboard Failed

Openclipboard Failed

I keep on having the error «Openclipboard Failed» when I am working on assemblies either with inserting my own parts or assemblies or insterting parts from the toolbox. It has happened ever since I installed SW on my current machine that meets all of SW specs (Pentium D 3.4GHz with 2GB of RAM with a NVIDIA Quadro FX 1500)
I thought my upgrade to 2007 would fix it, but I am still getting the error and my reseller has never seen it before and are working with SW to figure it out. Does anyone have any ideas?
What I do now is just click okay on the error and try again until it works (1 to 5 times)

RE: Openclipboard Failed

I get that error message a lot as well. Dell Precision workstation PWS380 with 2 Gb RAM, NVidia Quadro FX 3450/4000 SDI.

Started in 2006. It seems to happen randomly. The inserted component appears fixed in space but applying any mate to it «frees it up» to be positioned normally. When I get it Solidworks won’t let me insert multiple instances of that component unless I enter it again as I did the first instance.

Even restarting Solidworks doesn’t seem to affect this random situation.

I know this doesn’t help much, but at least you know others experience this as well.

RE: Openclipboard Failed

«What I do now is just click okay on the error and try again until it works (1 to 5 times)»

That’s what I do also whenever I get that error. I just accepted it as one of SW quirks and keep on working. I am using SW06, with SW recommended drivers also, so I think it is a SW error (not user error).

RE: Openclipboard Failed

This may not be a SW error! Or if it is it’s in how SW handles the Windows Clipboard function.

Do a google for Openclipboard Failed & you will see it happens in a lot of different programs.

When you get this error are you drag-n-dropping or using the File > Insert method?

RE: Openclipboard Failed

It makes me happy that I’m not the only one to have this problem (sorry for the others in my boat)

It happens when I drag from the toolbox or file > insert.

I guess I just live with it like everyone else does.

RE: Openclipboard Failed

I use «insert components» from the Command Manager. I didn’t find anything on the SW side for «Openclipboard Failed» though.

RE: Openclipboard Failed

I have the same problem with Solidworks 2004 SP 1. It only happens when I am running on a remote system, though. From what I can tell, it is an issue with Excel being built in, though I have not verified that. All of my research leads me to believe that it is, though. I am wondering now if it has to do with parts that have design tables. if someone has the free time to check into that.

I don’t drag & drop, I use Insert > Existing Component or the Command Manager.

RE: Openclipboard Failed

It happens to us on items without design tables. I’m inclined to agree it’s a Windows-Solidworks problem though. We use Office 2000 here. Maybe that’s a common link?

When I googled «OpenClipboard failed» last week I gave up after seeing how common it is with a lot of software. Looks like one of those things I’ve learned to live with.

RE: Openclipboard Failed

Remember.
«If you don’t use your head,
your going to have to use your feet.»

RE: Openclipboard Failed

Here’s something brand new to me this morning.

I opened a part I created yesterday. I tried to insert it into a new assembly. In the new assy I got the openclipboard failed error. The part did not insert. Solidworks closed itself «DUE TO AN ERROR».

That happened twice so I closed all software, cleared the temp files, and restarted the PC. Opened everything except Excel and tried again. Same result.

Shut down again, cleared TEMP, opened Solidworks only. It worked fine.

Opened my normal software, everything is OK again.

The issue has been annoying for months. Today it elevated itself to #%*@$!

RE: Openclipboard Failed

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members! Already a Member? Login

Ошибка CLIPBRD_E_CANT_OPEN при настройке буфера обмена из .NET.

Почему следующий код иногда вызывает исключение с содержимым «CLIPBRD_E_CANT_OPEN»:

Обычно это происходит при первом использовании буфера обмена в приложении, а не после этого.

.net clipboard wpf

6 ответов

29 Решение Tadmas [2008-09-16 05:21:00]

На самом деле, я думаю, что это ошибка Win32 API.

Чтобы установить данные в буфер обмена, сначала откройте его. Только один процесс может открывать буфер обмена одновременно. Таким образом, когда вы проверяете, если какой-либо другой способ открывает буфер обмена по какой-либо причине, ваша попытка открыть его не удастся.

Так получилось, что службы терминалов отслеживают буфер обмена, а в старых версиях Windows (pre-Vista) вам нужно открыть буфер обмена, чтобы увидеть, что внутри. что в конечном итоге блокирует вас. Единственное решение — дождаться, когда Terminal Services закроет буфер обмена и повторит попытку.

Важно понимать, что это не относится к службам терминалов, однако: это может произойти с чем угодно. Работа с буфером обмена в Win32 — это гигантское состояние гонки. Но, поскольку по дизайну вы должны только гадать с буфером обмена в ответ на ввод пользователя, это обычно не представляет проблемы.

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

Решение состоит в том, чтобы попробовать несколько раз в цикле и спать между ними.

8 pr0gg3r [2016-08-24 16:46:00]

Я знаю, что этот вопрос старый, но проблема все еще существует. Как упоминалось ранее, это исключение возникает, когда системный буфер обмена блокируется другим процессом. К сожалению, многие инструменты для съёмки, программы для скриншотов и инструменты копирования файлов, которые могут блокировать буфер обмена Windows. Таким образом, вы получите исключение каждый раз, когда пытаетесь использовать Clipboard.SetText(str) , когда такой инструмент установлен на вашем ПК.

никогда не используйте

На самом деле может быть и другая проблема. Рамочный вызов (как WPF, так и winform) к чему-то вроде этого (код от рефлектора):

Обратите внимание, что SetDataObject всегда вызывается с истинным в этом случае.

Внутренне, что вызывает два вызова win32 api, один для установки данных и один для его очистки от вашего приложения, чтобы он был доступен после закрытия приложения.

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

Не нашли хорошего решения, кроме как написать собственный класс буфера обмена, который использует прямой API win32 или вызвать setDataObject напрямую с помощью false для хранения данных после закрытия приложения.

4 Mar [2015-05-11 13:45:00]

Я решил эту проблему для своего собственного приложения, используя собственные функции Win32: OpenClipboard(), CloseClipboard() и SetClipboardData().

Ниже класс обертки, который я сделал. Может ли кто-нибудь просить проверить его и сообщить, правильно ли он или нет. Особенно, когда управляемый код работает как приложение x64 (я использую любой CPU в вариантах проекта). Что происходит, когда я ссылаюсь на библиотеки x86 из приложения x64?

0 MaxyDav [2017-05-11 11:36:00]

Это происходит со мной в моем приложении WPF. У меня возникла ошибка OpenClipboard (исключение из HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN)).

решение состоит в том, чтобы сначала очистить буфер обмена

Ошибка CLIPBRD_E_CANT_OPEN при установке буфера обмена из .NET

Почему следующий код иногда вызывает исключение с содержимым «CLIPBRD_E_CANT_OPEN»:

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

6 Ответов

Это вызвано ошибкой / функцией в буфере обмена Terminal Services (и возможными другими вещами) и реализацией буфера обмена .NET. Задержка при открытии буфера обмена вызывает ошибку, которая обычно проходит в течение нескольких миллисекунд.

Решение состоит в том, чтобы попробовать несколько раз в цикле и спать между ними.

На самом деле, я думаю, что это вина Win32 API .

Чтобы установить данные в буфер обмена, вы должны сначала открыть его . Только один процесс может одновременно открыть буфер обмена. Поэтому, когда вы проверяете , открыт ли буфер обмена по какой-либо причине другим процессом, ваша попытка открыть его будет неудачной.

Просто так получилось, что Terminal Services отслеживает буфер обмена, и в более старых версиях Windows (pre-Vista) вам нужно открыть буфер обмена, чтобы увидеть, что находится внутри. что в конечном итоге блокирует вас. Единственное решение-дождаться, пока Terminal Services закроет буфер обмена, и повторить попытку.

Однако важно понимать, что это не является специфичным для Terminal сервисов: это может произойти с чем угодно. Работа с буфером обмена в Win32-это гигантское состояние гонки. Но, поскольку по замыслу вы должны только возиться с буфером обмена в ответ на ввод пользователя, это обычно не представляет проблемы.

Я знаю, что этот вопрос стар, но проблема все еще существует. Как уже упоминалось ранее, это исключение возникает, когда системный буфер обмена блокируется другим процессом. К сожалению, есть много инструментов для обрезки, программ для скриншотов и инструментов копирования файлов, которые могут блокировать буфер обмена Windows. Таким образом, вы будете получать исключение каждый раз, когда вы пытаетесь использовать Clipboard.SetText(str) , когда такой инструмент установлен на вашем PC.

никогда не использовать

используйте вместо этого

На самом деле здесь может быть и другая проблема. Вызов фреймворка (как WPF, так и WinForm вкусов) к чему-то вроде этого (код от reflector):

Обратите внимание, что SetDataObject всегда вызывается с true в этом случае.

Внутренне это вызывает два вызова win32 api, один для установки данных и один для удаления их из вашего приложения, чтобы они были доступны после закрытия приложения.

Я видел несколько приложений (некоторые плагины chrome и менеджер загрузок), которые прослушивают событие буфера обмена. Как только произойдет первый вызов, приложение откроет буфер обмена, чтобы посмотреть данные, а второй вызов для сброса завершится неудачей.

Не нашел хорошего решения, кроме как написать свой собственный класс буфера обмена, который использует прямой win32 API или вызвать setDataObject напрямую с false для хранения данных после закрытия приложения.

Я решил эту проблему для моего собственного приложения, используя собственные функции Win32: OpenClipboard(), CloseClipboard() и SetClipboardData().

Ниже класса обертки, который я сделал. Может ли кто-нибудь, пожалуйста , просмотреть его и сказать, является ли он правильным или нет . Особенно когда управляемый код выполняется как приложение x64 (я использую любой CPU в параметрах проекта). Что происходит, когда я ссылаюсь на библиотеки x86 из приложения x64?

Это происходит со мной в моем приложении WPF. Я получил OpenClipboard сбой (исключение из HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN)).

решение состоит в том, чтобы сначала очистить буфер обмена

Похожие вопросы:

Кто-нибудь заметил, что если вы извлекаете HTML из буфера обмена, он получает неверную кодировку и вводит странные символы? Например, выполнение такой команды: string s = (string).

Мое приложение использует метод Copy() DataGrid для извлечения всех данных для экспорта в CSV и другие форматы. Все, что я делаю-это Очистить буфер обмена Звоните myGrid.Copy() Теперь это обычно.

При каких обстоятельствах функция Win32 API OleGetClipboard() выйдет из строя и вернет CLIPBRD_E_CANT_OPEN ? Дополнительная информация: я помогаю с исправлением ошибки Firefox. Подробности здесь.

У меня возникли проблемы с буфером обмена, и я получаю это сообщение об ошибке каждый раз, когда я пытаюсь сделать операцию копирования / вставки из файла Excel. Код разрывается на.

Мне нужно сделать простое приложение-службу, которое будет привязываться к буферу обмена Windows. В частности, каждый раз, когда происходит операция копирования / вырезания, я хочу проанализировать.

Я делаю это в C#,, но, я думаю,это не языковая проблема. У меня есть пример кода о том, как определить, когда содержимое буфера обмена изменяется. Теперь я хочу изменить текст, который только что.

Я пишу надстройку C# Word 2013, которая запутывает содержимое буфера обмена, если копируемое содержимое находится в управляемом приложении Word. У меня есть несколько вопросов. Я столкнулся с.

Ошибка при вызове openclipboard в solidworks

Hi All! Subj. На последней строчке в этом куске:

windows.BringWindowToTop(h_pars);
PressKeys(«Ctrl+C»,10); // эмуляция нажатия на клавиши
line := Clipboard.AsText;

в стандартном модуле Clipbrd в этои вот месте:

if not OpenClipboard(FClipboardWindow) then
raise Exception.CreateRes(@SCannotOpenClipboard);

прога орет, что не может прочесть буфер. В чем может быть дело?


Jeer © ( 2004-11-17 17:44 ) [1]

Значит там не текст:(


cvg ( 2004-11-17 17:49 ) [2]

Ctrl-C грабит экран в окне, которое стало делается активным в первой приведенной строчке, правильно? Там таблица с меняющимися данными. Последняя строчка преобразует все, что можно, в текст. Так ведь, вроде?


cvg ( 2004-11-17 18:22 ) [3]

Ну что, больше ни у кого никаких мыслей нет?


Jeer © ( 2004-11-17 18:51 ) [4]


cvg ( 2004-11-18 15:03 ) [5]

Не, все-таки она на второй из нижеприведенных строчек она все равно орет «Cannot open Clipboard» :((

if not Clipboard.HasFormat(CF_TEXT):boolean
if not OpenClipboard(FClipboardWindow) then
raise Exception.CreateRes(@SCannotOpenClipboard);


VMcL © ( 2004-11-18 15:07 ) [6]

Что говорит GetLastError или SysErrorMessage?


cvg ( 2004-11-18 15:36 ) [7]

Думешь, это что-нить даст? Самое-то тут противное то, что ана все ети дела грабит с экрана (хотя есть и режим работы с данными из файла), а значит я не могу подлезть с отладчиком.


Amoeba © ( 2004-11-18 15:55 ) [8]


> ана все ети дела грабит с экрана

В таком случае в Clipboard нет никакого текста и
line := Clipboard.AsText;
не лезет ни в какие ворота.


cvg ( 2004-11-18 16:23 ) [9]

Хм, а почему ж тогда рекомендованный Clipboard.HasFormat(CF_TEXT):boolean пропустил все это?


Amoeba © ( 2004-11-18 16:28 ) [10]

выполни после «грабления» экрана вот этот код:

if Clipboard.HasFormat(CF_TEXT) then
line := Clipboard.AsText
else
ShowMessage(«Bla-bla-bla!»);


cvg ( 2004-11-18 17:14 ) [11]

Попробовал. Все равно на строке line := Clipboard.AsText выдала ту же ошибку — «Cannot open Clipboard». Да и не думаю я, что это изменение помогло бы, потому что до этого у меня так вот было:

try
line := Clipboard.AsText;
except
raise Exception.Create(«blah-blah-blah»);
end;


cvg ( 2004-11-18 17:15 ) [12]

Попробовал. Все равно на строке line := Clipboard.AsText выдала ту же ошибку — «Cannot open Clipboard». Да и не думаю я, что это изменение помогло бы, потому что до этого у меня так вот было:

try
line := Clipboard.AsText;
except
raise Exception.Create(«blah-blah-blah»);
end;


VMcL © ( 2004-11-18 17:21 ) [13]

>Думешь, это что-нить даст?

Конечно, не даст. Ведь у меня хобби такое — давать бесполезные советы.


Amoeba © ( 2004-11-18 17:28 ) [14]

Если у тебя в буфере изображение захваченное с экрана, то после
if Clipboard.HasFormat(CF_TEXT) then
строка
line := Clipboard.AsText;
выполняться не будет

и не надо никаких
try
.
except
.
end

Просто нужно проверить формат содержимого Clipboard.

И еще. Так и не последовало никакой реакции на Amoeba © (18.11.04 15:55) [8]


cvg ( 2004-11-18 17:45 ) [15]


Функция OpenClipboard открывает
буфер обмена для проверки и не дает другим
приложениям модифицировать его содержание.

Синтаксис

BOOL OpenClipboard(
    HWND hWndNewOwner
);



Параметры

hWndNewOwner

[in] Дескриптор окна, которое
связывается  с открытым буфером обмена.
Если этот параметр имеет значение ПУСТО (NULL),
открытый буфер связан с текущей задачей.

Возвращаемые значения

Если функция завершается успешно,
величина возвращаемого значения — не нуль.

Если функция завершается с ошибкой,
величина возвращаемого значения — нуль.
Чтобы получать дополнительные сведения об
ошибке, вызовите GetLastError.


Замечания

Функция OpenClipboard завершается ошибкой, если
другое окно имеет открытый буфер обмена.

Приложение должно вызвать функцию

CloseClipboard после каждого успешного вызова
OpenClipboard.

Окно, идентифицированное параметром

hWndNewOwner
  не становится владельцем буфера
обмена, если не вызывается функция EmptyClipboard.

Пример смотри в статье Копирование
информации в буфер обмена
.

Смотри также 

Обзор Буфер обмена,
CloseClipboard,
EmptyClipboard


Размещение и
совместимость OpenClipboard


Windows. NET Server

Да


Windows XP

Да


Windows 2000

Да


Windows NT

Да версии 3.1 и выше


Windows Me

Да


Windows 98

Да

Windows 95

Да


Используемая библиотека


User32.lib


Заголовочный файл

 

— объявлено в


Winuser.h

— включено в


Windows.h


Unicode

Нет


Замечания по
платформе

Не имеется

Hosted by uCoz

Hi All,

I am posting this problem upon reviewing many forums with regard to this issue with no avail, hence decided to post a question with expectation to hear from an expert in this field. The issue I’m facing is listed below.

I have developed an Excel 2007 application containing VBA Macros to perform an automation. The automated workbook reads many data files in order to extract data out of them (for instance 20 files). The extracted data is run over a series of calculations
which result in populating sheets of structured data and a number of charts. Upon the end of the process the workbook prints several PDF outputs (i.e. using Excels PDF addin) and completes a single run.

The problem arises at the below code segment when I run the workbook two or more times, where at the PDF print stage it gives me a run time error saying «Run-Time Error: Document not saved. The document must be open, or an error may have been encountered
when saving». However none of the PDFs generated at the first run are never opened.

RMV_ReportsWS.ExportAsFixedFormat Type:=xlTypePDF, fileName:=filePathAndName, Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Upon stopping the debugger and trying to manually copy any text in the VB Editor window throws an «Out Of Memory» warning message and when I try to copy any data from any of the worksheets in the workbook it throws a «Cannot Open Clipboard» warning
message. It is to note that the workbook completes fully at its first run
and subsequent runs causing the above mentioned issues. 

I assume this is a matter with the clipboard however I am unable to resolve the issue. I have used the following code at each point of the code to ensure clipboard cleanup but even this does not seem to address the problem

Option Explicit
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
 
Public Function ClearClipboard()
  If OpenClipboard(Application.hwnd) = 0 Then
   ClearClipboard = False
  Else
   EmptyClipboard
   CloseClipboard
   ClearClipboard = True
  End If
End Function

As for the specs I currently run the workbook on a Windows 7 32bit, with 2GB RAM in Excel 2007 SP2.

I would really appreciate feedback from as it is a very frustrating situation.

Thank You and Best Regards,
Praneeth


Praneeth Wickramasinghe

  • Ошибка при вызове конструктора ftpсоединение ошибка аутентификации при доступе к ресурсу
  • Ошибка при вызове loadlibrary не найдена указанная процедура
  • Ошибка при вызове конструктора ftp соединение
  • Ошибка при вызове loadlibrary не найден указанный модуль regsvr32
  • Ошибка при вызове конструктора comобъект установлен безопасный режим выполнение запрещено 1с