Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование в качестве замены информации из буфера  (Прочитано 25387 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
mjpv
Гость
« : 02-10-2009 19:46 » new

Можно ли в окошке "Найти и заменить" в макросе в качестве строки замены использовать то, что предварительно скопировано в буфер обмена? Проблема в том, что копирование в буфер будет различным в процессе работы макроса, только эту информацию надо заменить вместо определенных символов. Пример ниже.

    With Selection.Find
        .Text = "3100,"
        .Replacement.Text = "4200"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

      В этом блоке вместо 4200 надо вставить информацию из буфера обмена?
Это возможно или нет. Поделитесь пожалуйста, кто знает.
Записан
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #1 : 15-12-2010 11:37 » 

Dim Data1 As New DataObject, Буфер1$
Data1.GetFromClipboard
Буфер1$ = Data1.GetText(1)
 With Selection.Find
        .Text = "3100,"
        .Replacement.Text = Буфер1$
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

До сих пор не пойму где теги выделения скрипта брать???

Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 15-12-2010 11:42 » 

Ципихович Эндрю,

[code]
[/code]


или в полной форме ответа есть кнопки
Записан

Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #3 : 15-12-2010 11:51 » 

ну написал код выделил, на какую кнопку нажать, где она находится, чтобы запись тегами обросла
Не писать же вручную
Код:
а почему бы и не написать ? Или ты куда-то торопишься ? ))

« Последнее редактирование: 15-12-2010 11:54 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 15-12-2010 11:54 » 

Ципихович Эндрю, внизу есть кнопка "ОТВЕТ"
Записан

Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #5 : 15-12-2010 12:11 » 

Код:
Dim Data1 As New DataObject, Буфер1$
Data1.GetFromClipboard
Буфер1$ = Data1.GetText(1)
 With Selection.Find
        .Text = "3100,"
        .Replacement.Text = Буфер1$
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

Это ещё запомнть нужно, что решётка это код
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 15-12-2010 12:14 » 

Ципихович Эндрю, ок, разобрались. А вопрос то ты забыл задать )) Отредактируй пост Ответ #1  , потом всё лишнее удалю
Записан

Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #7 : 15-12-2010 12:20 » 

>А вопрос то ты забыл задать
Какой вопрос??? Могу задать, как вставить не последний, а предпоследний объект из буфера обмена  эту строку
.Replacement.Text = Буфер1$
И как поставить условие, в вдруг в буфере обмена не текст, а файл или изображение?Не понял??
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 15-12-2010 13:09 » 

Совершенно очевидно, что надо сначала спросить буфер какого типа информация в нём находится, и, в соответствии с этим, принимать решение.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #9 : 15-12-2010 23:36 » 

> надо сначала спросить буфер какого типа информация в нём находится
согласен, скрипт условия подскажите
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 16-12-2010 07:23 » 

Зависит от версии Васика. Например, в 6.0:

Код:
If Clipboard.GetFormat(vbCFText) Then
   Text1.Text = Clipboard.GetText(vbCFText)
End If
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #11 : 16-12-2010 08:07 » 

Еще бы ремарки добавить

Код:
'условие, если ...
If Clipboard.GetFormat(vbCFText) Then
'тогда ...
   Text1.Text = Clipboard.GetText(vbCFText)
End If
Заремарчьте пожалуйста
Записан
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #12 : 16-12-2010 08:13 » 

и как Ваш скрипт работает сам по себе

Код:
'условие, если ...
If Clipboard.GetFormat(vbCFText) Then
'тогда ...
   Text1.Text = Clipboard.GetText(vbCFText)
End If

или вот так
Код:
Dim Data1 As New DataObject, Буфер1$
Data1.GetFromClipboard
Буфер1$ = Data1.GetText(1)
'условие, если ...
If Clipboard.GetFormat(vbCFText) Then
'тогда ...
   Text1.Text = Clipboard.GetText(vbCFText)
End If
Что-то ни так ни так не работает, поясните пжл
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #13 : 16-12-2010 08:52 » 

Я так понимаю, разговор идет не про VisualBasic а про VBA? В VBA не уверен что есть объект Clipboard.
http://word.mvps.org/faqs/macrosvba/ManipulateClipboard.htm
http://www.google.ru/search?source=ig&hl=ru&rlz=&q=Clipboard+VBA
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #14 : 17-12-2010 01:09 » 

Ну есть скрипт
Код:
'требуется установить ссылку на "Microsoft Forms 2.0 Object Library"
'получить текст из буфера обмена в строку переменной
On Error Resume Next
Dim MyData As DataObject
Dim strClip As String
Set MyData = New DataObject
MyData.GetFromClipboard
strClip = MyData.GetText 'то что находится в буфере обмена, последний объект
Debug.Print Err.Number & Err.Description 'ошибка происходит если в буфере обмена файл
MsgBox$ Err.Number & " " & Err.Description
В зависимости от номера ошибки будем узнавать, что там в буфере файл или что другое
И какие номера этих ошибок??
Можно самому испробовать но сколько таких вариантов получения ошибки?Не понял
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #15 : 17-12-2010 07:17 » 

Ципихович Эндрю, существует функция CStr(), которая переводит объект в строку (как может). С ней ты ошибку не получишь.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #16 : 17-12-2010 09:40 » 

не понял, так:strClip = CStr(MyData.GetText)
Всё равно получаю ошибку -2147221404DataObject:GetText Ошибка в структуре FORMATETC
Но дело в том, что получить ошибку наооборот интересно, если знать сколько таких вариантов получения ошибки?Не понял?
Чтобы по той полученной ошибки ориентироваться
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 17-12-2010 09:50 » 

Но дело в том, что получить ошибку наооборот интересно

"Ошибка наоборот" - это, пожалуй, правильная программа.

сколько таких вариантов получения ошибки?Не понял?

Видимо, если ошибки нумеруются начиная с -1, то не менее двух миллиардов.

Кстати, в интернете можно искать информацию. Поиск приводит на страничку маленькой, но гордой софтверной компании: http://support.microsoft.com/kb/186063/ru?spid=2484&sid=639
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #18 : 17-12-2010 09:59 » 

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

Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 17-12-2010 10:36 » 

У  DataObject есть метод для определения формата данных:

Цитата
GetFormat Determines if a specified data format is available in the DataObject object.

Вот эти форматы:

ConstantValueMeaning
vbCFText1Text
vbCFBitmap2Bitmap (.bmp)
vbCFMetafile3Metafile (.wmf)
vbCFEMetafile14Enhanced metafile (.emf)
vbCFDIB8Device-independent bitmap (.dib or .bmp)
vbCFPalette9Color palette
vbCFFiles15List of files
vbCFRTF-16639Rich text format (.rtf)

Текст из буфера можно забирать только при условии, что формат в нем vbCFText.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #20 : 17-12-2010 11:26 » 

Спасибо, уже теплее
подскажите скрипт, как у DataObject определить формат данных.

Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 17-12-2010 11:35 » 

Ципихович, а зачем самому напрягаться-то? Вы тогда уж нам откройте удаленный доступ к своему компьютеру, чтобы мы сами сразу готовые программы набирали. А то мы сейчас скрипт подскажем, а его еще придется на клавишах набрать, мороки столько...
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #22 : 19-12-2010 08:50 » 

в этой строке
sStr = oDataObj.GetText() 'присваиваем переменной значение из буфера
это последнее значение буфера, можно узнать сколько их там объектов???
каждому объекту циклом или в массив присвоить переменную???
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines