1

Тема: Бфер обмена

в этой строке
sStr = oDataObj.GetText() 'присваиваем переменной значение из буфера
это последнее значение буфера, можно узнать сколько их там объектов в буфере???
как каждому объекту циклом или в массив присвоить переменную???
Также подскажите, можно ли осуществить перенос текста, таблицы в документе Ворд из одного места, в другое место можно осуществить через DataObject, подскажите пример этого
То есть избавиться от Selection.Copy раз и навсегда

2

Re: Бфер обмена

Ципихович Эндрю пишет:

перенос текста, таблицы в документе Ворд из одного места, в другое место

1)
ThisDocument.Tables(1).Copy
...


2)
Dim tempTable As Table
Set tempTable = ThisDocument.Tables(1)

При поточной обработке документа Selection вообще должно быть делом исключетельно редким - ведь юзер не участвует, НО в случае если вы отказываетесь от Selection точная адресация объекта это ваша головная боль... И тут нужно быть очень осторожным в случае, если вы хотите применмть  макрос не ко всему документу, а только к его части или же по условию...

Аналогично что-то с параграфом.

Принципы работы с буфером обмена Windows
http://wordexpert.ru/page/principy-rabo … na-windows

Делай, что можешь, и будь, что будет!

3

Re: Бфер обмена

VBA-addict пишет:

ThisDocument.Tables(1).Copy

или
ActiveDocument.Tables(1).Copy
получаю Функция not found

4

Re: Бфер обмена

Ципихович Эндрю пишет:
VBA-addict пишет:

ThisDocument.Tables(1).Copy

или
ActiveDocument.Tables(1).Copy
получаю Функция not found

упс, абздался smile

    ActiveDocument.Tables(1).Range.Copy
    Documents.Add.Content.Paste
Делай, что можешь, и будь, что будет!

5

Re: Бфер обмена

Эндрю, еще раз призываю - используйте побольше Дебаггер + Watch Window.

Способ прост как правда:
0) При написании команд вручную работает автозаполнение. Т.о. если стереть ActiveDocument.Tables(1).Copy и поставить затем точку, то выведутся применимые к объекту свойства и методы - там сразу станет видно, что Copy не применим, а вот Range - вполне, а к нему уж Copy.

Далее - для более тонкой отладки
1) Где-нибудь в своей процедуре ставите точку останова
2) Кидаете интересующий вас объект в Watch Window - в процессе исполнения после инициализации объекта вы можете просмотреть все его свойства

почитайте на эту тему обязательно:
Отладка приложений, обработка ошибок
внешняя ссылка

Отредактировано VBA-addict (20.12.2010 14:54:14)

Делай, что можешь, и будь, что будет!

6

Re: Бфер обмена

например имеем открытым документ Ворд с открытым буфером обмена, справа  от документа открыт лифт буфера обмена, ОК??
Проходим строку скрипта:
ActiveDocument.Tables(1).Range.Copy
Что видим, в лифте появился этот объект
Выдержки из Ваших слов
при обработке документа Selection вообще должно быть делом исключетельно редким - ведь юзер не участвует
это моя головная боль...
ЧТОБЫ СКОПИРОВАННЫЕ ПРОГОЙ ОБЪЕКТЫ НЕ ПОПАДАЛИ В "ЛИФТ"

7

Re: Бфер обмена

Ципихович Эндрю пишет:

Что видим, в лифте появился этот объект

Эндрю, не ловите меня за руку - "Лифт" - это отображение Буфера обмена - в вашем топике вы хотели избавиться от метода Selection.Copy, а не от буфера обмена! При любом копировании в буфер вы будете его видеть - значит любой метод Copy вам будет давать лифт.

ОФФТОП:Кстати, у лично у меня этот лифт вызывает раздражение - я его постоянно прячу - если кто научит чем он может быть полезен реально буду признателен...

Теперь... Если вы вообще хотите миновать Буфер обмена, тогда нужно работать на уровне Range

    Dim RgSrc As Range, RgDest As Range
    Set RgSrc = ActiveDocument.Tables(1).Range
    
    Set RgDest = ActiveDocument.Range ' это если копирование в конец текущего документа
    'Set RgDest = DestDoc.Range ' это если копирование в конец некого документа DestDoc, определенного где-либо ранее

    RgDest.Collapse wdCollapseEnd
    RgDest.FormattedText = RgSrc.FormattedText

Отредактировано VBA-addict (20.12.2010 16:37:44)

Делай, что можешь, и будь, что будет!

8

Re: Бфер обмена

Спасибо, Ваш скрипт посмотрю
О лифте
на кнопки Альт + я, вешаете это и будет Вам счастье, он у меня всегда открыт, монитор 24 дюйма широкоформатник, когда был 15 конечно я буфер не открывал

Sub Открыть_закрыть_панель_буфера_обмена()

If CommandBars("Task Pane").Visible = False Then
WordBasic.EditOfficeClipboard 'открывание панели буфера обмена для офиса 2003, 2007
Else
CommandBars("Task Pane").Visible = False 'закрывание панели буфера обмена для офиса 2003
End If

'WordBasic.EditOfficeClipboard 'открывание панели буфера обмена для офиса 2003, 2007
'CommandBars("Task Pane").Visible = False 'закрывание панели буфера обмена для офиса 2003
'CommandBars("Office Clipboard").Visible = False 'закрывание панели буфера обмена для офиса 2007

End Sub

Применение - надёргиваете в лифт то что нужно, куски текста и вперёд
Если я знаю, что буду писать о автомашине 1 час я закидываю в лифт
автомашин
гос. номер
И вперёд, ОК??

Отредактировано Ципихович Эндрю (20.12.2010 17:48:10)