Как очистить Буфер обмена в офисе?

Программирование на Visual Basic for Applications
vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Как очистить Буфер обмена в офисе?

Сообщение vrodo » 02.03.2005 (Ср) 11:11

Уважаемые, Господа!

сабж. собственно
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.03.2005 (Ср) 11:19

Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 02.03.2005 (Ср) 11:32

что самое интересное я уже это пробовал
данные API не работают с клипбоардом офиса
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.03.2005 (Ср) 11:35

Видать, потому, что это не клипбоард :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 02.03.2005 (Ср) 11:51

да придставляешь, однако :lol:
нет я на полном серьезе он называется Буфер Обмена и работает только для офиса
у офиса наверно есть свои апишки для работы с ним
мне кажется что тормоза у меня из за того что память захламлена
хотя все объектнае переменные я ставлю нафинь после отработки функции :?
проц загружается на 100% хотя машина вроде не слабая более 2Ghz Myst DEPO
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

gacol
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 02.11.2004 (Вт) 13:13
Откуда: Нов. Уренгой

Сообщение gacol » 02.03.2005 (Ср) 12:35

На VBA Excel
Application.Calculate

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 02.03.2005 (Ср) 12:48

Уважаемый, gacol!
Вы наверно имели ввиду
Application.Calculation = xlCalculationManual
но данная вещь мне не помогает так как в дебагере тормоза идут именно на функциях
Copy
Insert
PasteSpecial
Delete
в приложении к Range.EntireRow
не могу использовать другие диапазоны так как часто вставку надо делать в середину документа
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 02.03.2005 (Ср) 13:07

Слушай, а что ты вообще имеешь в виду под словами "буфер обмена"?

Если ты просто ячейки копируешь, и тебе нужно очистить выделение ячеек (то, которое обозначается мерцающим пунктиром по краям), то все просто - вставь в нужном месте Application.CutCopyMode=False и выделение исчезнет. При Application.Calculate, кстати, происходит то же самое, но еще заодно и все книги пересчитаются, что совершенно не нужно.
Быть... или не быть. Вот. В чём вопрос?

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 02.03.2005 (Ср) 13:55

Под "буфером обмена" имею ввиду именно БУФЕР ОБМЕНА

Вызывается в меню Правка/Буфер обмена Office...
или двойным нажатием Ctrl+C

Учите мат. часть Уважаемый!
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 02.03.2005 (Ср) 14:21

Мат-часть - это армейское понятие изначально - "Материальная часть".

gacol
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 02.11.2004 (Вт) 13:13
Откуда: Нов. Уренгой

Сообщение gacol » 03.03.2005 (Чт) 6:27

[quote="vrodo"]Уважаемый, gacol!
Вы наверно имели ввиду
Application.Calculation = xlCalculationManual ....

Уважаемый Vrodo!
Я имел введу именно событие Application.Calculation, при этом происходит и очистка буфера обмена.

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 03.03.2005 (Чт) 9:49

как Вы наверно уже поняли у меня на страницах много формул данная функция вызовет только лишние тормоза
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 03.03.2005 (Чт) 10:19

gacol писал(а):Я имел введу именно событие Application.Calculation, при этом происходит и очистка буфера обмена.


Не-а, не происходит, и при Appication.Calculate не происходит, и при Application.CutCopyMode=False тоже не происходит, хотя я вчера сам в MSDN'е видел пример, где рядом с этой строкой стоит комментарий "Clear the Clipboard".

Убедиться достаточно легко - в Excele нажать Ctrl-C-C, чтобы открылся буфер обмена, и увидеть, что он ни фига не очищается. Единственный способ - нажать на кнопочку "Очистить все".

Вопрос с очисткой - на самом деле очень интересный. Я покопался в интернете, пока нашел немного.

Последняя запись в Буфере обмена Office совпадает с обычным Windows'ским Clipboard'ом. При использовании EmptyClipboard очищается именно Windows'ский, после этого через простую вставку ничего вставить нельзя, но очистки Буфера Офиса при этом не происходит!

Ну, что, будут у кого-нибудь какие-нибудь идеи? Самому уже интересно, хотя для меня, по крайней мере, вопрос практического смысла не имеет.

ЗЫ Кто-нибудь что-нибудь знает про DataObjects? Например, про них есть топик "What is the difference between the DataObject and the Clipboard?" в справке VBA...

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 04.03.2005 (Пт) 10:25

Так не катит?
Код: Выделить всё
Application.CommandBars("Clipboard").Controls("Очистить буфер обмена").Execute

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 04.03.2005 (Пт) 10:48

Да что-то не катит, у меня, во всяком случае, Application.CommandBars("Clipboard").Controls.Count=0, соответственно, никакого Execute сделать не могу.

И вообще, по-моему, Clipboard - это не то.
Быть... или не быть. Вот. В чём вопрос?

Talker
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 07.05.2006 (Вс) 21:17

Сообщение Talker » 09.05.2006 (Вт) 16:26

Эффект, аналогичный использованию библиотечных функций дает код

Код: Выделить всё
Dim MyData As DataObject
Set MyData = New DataObject
MyData.SetText ""
MyData.PutInClipboard


Буфер обмена остается нетронутым, но clipboard очищается (кнопка Вставить становкится неактивной)

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 09.05.2006 (Вт) 16:39

ActiveWorkbook.Save
:)

Talker
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 07.05.2006 (Вс) 21:17

Сообщение Talker » 09.05.2006 (Вт) 16:57

Avtopic
Мне бы для Word'a такую фишку...

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 09.05.2006 (Вт) 18:21

Gloom писал(а):Так не катит?
Код: Выделить всё
Application.CommandBars("Clipboard").Controls("Очистить буфер обмена").Execute

CommandBars("Clipboard").Controls("Clear Clipboard").Execute
У меня работает очень хорошо (В Word-е, наверно и в Excel-е также будет работать).

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 12.05.2006 (Пт) 21:23

Спасибо, буду знать на будущее.

PS очень интересно тема поднялась :) прямо из небытия :) у меня с тех пор еще 4-5 проектов было :)
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

Bagir
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 10.10.2012 (Ср) 17:06

Re: Как очистить Буфер обмена в офисе?

Сообщение Bagir » 24.01.2014 (Пт) 13:56

Avtopic писал(а):CommandBars("Clipboard").Controls("Clear Clipboard").Execute
У меня работает очень хорошо (В Word-е, наверно и в Excel-е также будет работать).

А вот и нет. Экс 2003. CommandBars("Clipboard").Controls.Count = 0
Тут народ сильно путает буфер обмена винды и буфер обмена офиса. Буфер обмена офиса это отдельная их фишка (панелька), куда попадает все, что было скопировано в буфер обмена винды. И сколько не дрюч очисткой буфер обмена винды, к буферу обмена офиса это никак не относится.
На этой панельке есть кнопка "Очистить все". Конечно идея здравая сделать ей .Execute. Но увы не получается. Толи CommandBars("Clipboard") это не буфер обмена офиса, то ли кнопка "Очистить все" не попала в коллекцию .Controls.
А вообще то очень бы хотелось к ней подобраться.

Bagir
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 10.10.2012 (Ср) 17:06

Re: Как очистить Буфер обмена в офисе?

Сообщение Bagir » 24.01.2014 (Пт) 14:04

Код: Выделить всё
Private Sub Office_ClipBoard()
With Application
     If Val(.Version) = 9 Then
        With .CommandBars("ClipBoard").Controls(4)
             If .Enabled = True Then .Execute
        End With
     Else
       MsgBox "Пример только для MS Excel 2000"
     End If
End With
End Sub

Вот в том то и проблема.

Bagir
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 10.10.2012 (Ср) 17:06

Re: Как очистить Буфер обмена в офисе?

Сообщение Bagir » 24.01.2014 (Пт) 17:37

Теперь эта панель включает в себя не только "Буфер обмена", но еще и кучу другой ерунды. Можно легко проверить, что именно выбранно в данный момент.
Код: Выделить всё
If CommandBars("Task Pane").Controls(1).Caption Like "Буфер обмена*" Then
но как подобраться к кнопке "Очистить все" я еще не знаю. Возможно получится с помощью .FindControl, но угадывать ее ID без уверенности что он есть, дело не благодарное.

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как очистить Буфер обмена в офисе?

Сообщение alex77755 » 26.01.2014 (Вс) 7:49

как Вы наверно уже поняли у меня на страницах много формул

А разве буфер как-то связан с количеством формул на страницах?
сами по себе формулы и функции являются тормозами. И обилие их может привести к существенным тормозам.
Как-то мне заказывали написать UDF и прислали книгу. Она открывалась 40 минут. И после внесения изменений пересчитывалась столько же!
Уговорил убить почти все формулы, а для формирования отчётов написал пару макросов.
В итоге: книга открывается влёт. Формирование отчёта занимает 12с.
Но у меня почему-то даже мысли не возникло чистить буфера...

Template
Обычный пользователь
Обычный пользователь
 
Сообщения: 70
Зарегистрирован: 09.09.2006 (Сб) 18:03

Re: Как очистить Буфер обмена в офисе?

Сообщение Template » 26.01.2014 (Вс) 9:24

alex77755 писал(а):А разве буфер как-то связан с количеством формул на страницах?


Дык, gacol для очистки буфера обмена предлагал использовать Application.Calculate при котором и будут пересчитаны формулы.

Bagir
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 10.10.2012 (Ср) 17:06

Re: Как очистить Буфер обмена в офисе?

Сообщение Bagir » 27.01.2014 (Пн) 10:07

Я не знаю чем поможет очистка буфера обмена windows для ускорения операций расчета формул на листе, ну может и так, не пробовал. Сам формулами совсем не злоупотребляю, оперативной памяти вагон, и поэтому все работает и так очень быстро. А вот Application.Calculate ни коем образом не относится к буферу обмена ни windows, ни офис (который на CommandBars("Task Pane")). По крайней мере в 2003.
ТС тут как раз и спрашивает, как подобраться к кнопке очистки буфера обмена офиса. Там есть кнопка "Очистить все", но нажать на нее кодом VBA не получается. Этой кнопки нет в коллекции CommandBars("Task Pane"). Если кто знает как на нее жмакнуть, пожалуйста напишите.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList