Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Word find execute

VBA: cоздание первой программы

В первой части статьи мы приступили к работе по исследованию языка Visual Basic for Applications, записали первую макрокоманду и начали изучение ее текста, а здесь оно будет продолжено.

Для выравнивания абзацев по ширине при записи макроса была вызвана функция замены Word. Ее вызов и был записан на языке VBA. Строка Selection.Find.ClearFormatting, видимо, предназначена для снятия параметров форматирования в окне замены — эквивалент нажатию кнопки «Снять форматирование», а строки Selection.Find. ParagraphFormat.Alignment = wdAlignParagraphLeft и Selection. Find.Replacement.ParagraphFormat. Alignment = wdAlignParagraphJustify определены для установки параметров того, что надо искать (выравнивание Left, т. е. «По левому краю»), и того, на что следует заменить (выравнивание Justify, т. е. «По ширине»). Команды впрямую соответствуют переводу слов с английского языка на русский: Selection — выделение, Find.Replacement — найти и заменить, ParagraphFormat — формат абзаца, Alignment — выравнивание, AlignParagraphJustify — равнять абзац по ширине. С оператором With мы уже знакомы, поэтому в следующем фрагменте речь пойдет об окне «Найти и заменить».

Легко догадаться, что параметры объекта Selection.Find (т. е. поиск по всему тексту или по его выделенной части) соответствуют параметрам окна «Найти и заменить»: .MatchWholeWord — искать целое слово; .MatchCase — учитывать регистр; .Text — заменяемый текст, а .Replacement.Text — сообщить, на что заменить. В рассматриваемом примере заменяется не текст, а форматирование, поэтому строки с этими параметрами заполнять не нужно.

Заметив в первых четырех строках повторение слов Selection.Find, можно счесть, что и их содержимое допускается включить в блок оператора With. Проверим, так ли это. Ниже последнего записанного макроса введем строку Sub experience1() — имя после Sub может быть любым, важно лишь, чтобы оно не совпадало с какой-либо командой VBA. Нажмем «Ввод» — через две строки редактор VBA поставит End Sub. С помощью команд «Копировать» и «Вставить» скопируем из нашей программы в текст нового макроса блок With Selection.Find, а затем переместим все строки, отражающие в макросе «работу» окна «Найти и заменить», в блок With Selection.Find, убрав при этом слова Selection.Find.

Теперь испытаем программу: откроем из общего набора еще один документ и, нажав клавишу , запустим новый макрос (курсор должен стоять внутри текста запускаемого макроса). Замена произошла так, как требуется, значит, можно сокращать текст программы описанным выше способом.

Раскроем значение еще нескольких интересных строк, смысл которых может вызвать вопросы: .Forward = True, .Wrap = wdFindContinue, .Execute Replace:=wdReplaceAll. В первой строке указывается направление поиска — вперед или назад (в последнем случае стояло бы значение False). Но что же скрывает вторая? Чтобы выяснить это, напишем еще один макрос с такой же заменой выравнивания, но с разными параметрами направления поиска (табл. 1).

Вполне очевидно, что наличие или отсутствие согласия на продолжение поиска не влияет на записываемый текст. Тогда как же отказаться от запроса на продолжение? Откроем текст макроса и поставим еще один знак «=» после команды .Wrap.

Теперь все ясно: чтобы отказаться от замены в конце документа, нужно обозначить параметр .Wrap как wdFindStop (табл. 2).

Осталось разобраться со строкой .Execute Replace:=wdReplace All. Поскольку слово Execute переводится как «исполнить», оно должно означать команду запуска поиска. Обратимся к справочной системе.

Из четырех предложенных ссылок — Dialog, Find, KeyBinding, MailMerge — нас интересует Find, поскольку мы работаем именно с этим объектом.

Так и есть, Execute запускает команду поиска и замены на выполнение: Runs the specified find operation. Returns True if the find operation is successful. Из текста справки выясняется, что все параметры поиска и замены можно задать также в скобках, а кроме того, записать в переменную результат выполнения команды — успешно ли прошел поиск (т. е. были ли найдены в данном сеансе работы команды «Найти и заменить» искомые элементы). В данном случае этого не требуется, однако запомнить ее все же стоит.

Продолжим изучение записанной макрокоманды.

Вопросов не вызывает — это команда сохранения активного документа.

А вот здесь уже потребуется редактирование. Это команда «Сохранить как. » — поскольку соответствующая опция Word задается в диалоговом окне, то в текст макроса помещаются все возможные параметры, как соответствующие установленным по умолчанию, так и нет: AddToRecentFiles — добавлять ли ярлык в папку Recent, EmbedTrueTypeFonts — внедрять ли шрифты TrueType. Наиболее интересны элементы FileName:=?Доклад1.rtf? и FileFormat:=wdFormatRTF — имя сохраняемого активного документа и его формат соответственно. Последний, Rtf, нас устраивает. А вот как быть с именем? Ведь у каждого файла оно должно быть свое, уникальное. Сначала попробуем из текста данной команды просто исключить строку с указанием имени. Создадим еще один модуль, скопируем туда полную команду ActiveDocument.SaveAs со всеми параметрами и удалим строку FileName:=?Доклад1.rtf?. После запуска программы ничего не произошло, однако она все же что-то делала, ведь и жесткий диск работал, и в течение нескольких секунд система была недоступна, да и сообщений об ошибках не появилось. Проверим, что делалось. Откроем в Блокноте или другом текстовом редакторе файл, который сохранялся, — в данном случае это файл «Доклад2.doc», — предварительно выгрузив его из Word.

Так вот в чем дело — файл был сохранен в формате Rtf, но под прежним именем и с расширением .doc. Но нас это не устраивает, поэтому имя пусть останется то же, а вот расширение должно быть .rtf.

А что произойдет, если запустить программу при активном и ни разу не сохранявшемся документе? Проделаем это. Активный документ получит имя Doc1.doc (или Doc2.doc, Doc3.doc — у кого как) и окажется либо в папке, где имело место последнее сохранение вручную какого-либо файла, либо в папке «Мои документы», предназначенной по умолчанию для файлов Word, либо в любой другой заданной вами (путь «по умолчанию» можно посмотреть, выбрав пункты «Сервис?Параметры?Расположение».

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

Но как же быть с нашей программой? Ведь требуется, чтобы все обрабатываемые файлы сохранялись со своими именами и с расширением .rtf. Попробуем получить имя активного документа программно. Создадим еще один макрос, введем в него параметр ActiveDocument, поставим точку и увидим, что среди возможных продолжений команды есть свойство Name.

Проверим работу. Модифицируем экспериментальную процедуру следующим образом.

Как работает .Range.Find.Execute?

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщений [ 21 ]

1 Тема от o5andrey 18.03.2018 13:53:15

  • o5andrey
  • сержант
  • Неактивен
  • Откуда: Братск, Иркутская область
  • Зарегистрирован: 18.03.2018
  • Сообщений: 29

Тема: Как работает .Range.Find.Execute?

Здравствуйте. Интересует следующий вопрос.
Почему

Читать еще:  Электронный адрес телефон или имя пользователя

2 Ответ от Fck_This 19.03.2018 08:58:27

  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как работает .Range.Find.Execute?

Здравствуйте. Интересует следующий вопрос.
Почему

Всё работает
Ваш вид проще сделать так

А ещё компактнее вот так

А вот так будет верняк:

Скорее всего у вас там не было двух предложений или текст был заменён.

3 Ответ от o5andrey 19.03.2018 09:08:39

  • o5andrey
  • сержант
  • Неактивен
  • Откуда: Братск, Иркутская область
  • Зарегистрирован: 18.03.2018
  • Сообщений: 29

Re: Как работает .Range.Find.Execute?

Скорее всего у вас там не было двух предложений или текст был заменён.

А вот и нет, мой второй случай не работает. Вы проверили, у вас идёт?

4 Ответ от o5andrey 19.03.2018 09:47:35

  • o5andrey
  • сержант
  • Неактивен
  • Откуда: Братск, Иркутская область
  • Зарегистрирован: 18.03.2018
  • Сообщений: 29

Re: Как работает .Range.Find.Execute?

Вечером проверю ещё раз.

5 Ответ от Fck_This 19.03.2018 09:48:53

  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как работает .Range.Find.Execute?

Вечером проверю ещё раз.

6 Ответ от o5andrey 19.03.2018 15:14:52

  • o5andrey
  • сержант
  • Неактивен
  • Откуда: Братск, Иркутская область
  • Зарегистрирован: 18.03.2018
  • Сообщений: 29

Re: Как работает .Range.Find.Execute?

Я проверил на другом ПК

Test2 не работает.

110.docm 15.4 Кб, файл не был скачан.

You don’t have the permssions to download the attachments of this post.

7 Ответ от o5andrey 20.03.2018 09:13:05

  • o5andrey
  • сержант
  • Неактивен
  • Откуда: Братск, Иркутская область
  • Зарегистрирован: 18.03.2018
  • Сообщений: 29

Re: Как работает .Range.Find.Execute?

С «With — End With» тоже работает, а вот без всяких свёрток не работает. В общем, я объяснил это себе как глюк объекта и метода Find.Execute; как глюк Word.

8 Ответ от Вождь 20.03.2018 09:23:34

  • Вождь
  • Модератор
  • Неактивен
  • Зарегистрирован: 07.01.2010
  • Сообщений: 744
  • Поблагодарили: 180
  • За сообщение: 1

Re: Как работает .Range.Find.Execute?

Блин, ребята, вы синтаксис VBA то сначала выучите
Целая дискуссия из-за элментарной ошибки!

Каждый раз, когда вы пишите:

Создается новая переменная, по типу With.
Которая убивается, после выполнения команды

9 Ответ от Fck_This 20.03.2018 09:33:37

  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как работает .Range.Find.Execute?

Блин, ребята, вы синтаксис VBA то сначала выучите
Целая дискуссия из-за элментарной ошибки!

Каждый раз, когда вы пишите:

Создается новая переменная, по типу With.
Которая убивается, после выполнения команды

Спасибо. На счёт повторного использования Selection.paragraph(2).Range не видел или не обратил внимания на подобное. Разумеется, следует пользоваться оригинальными конструкциями.

10 Ответ от o5andrey 20.03.2018 16:17:41

  • o5andrey
  • сержант
  • Неактивен
  • Откуда: Братск, Иркутская область
  • Зарегистрирован: 18.03.2018
  • Сообщений: 29

Re: Как работает .Range.Find.Execute?

Рад что вам всё ясно. Но будьте любезны, поясните мне.

Создается новая переменная, по типу With.

11 Ответ от Вождь 21.03.2018 09:26:14

  • Вождь
  • Модератор
  • Неактивен
  • Зарегистрирован: 07.01.2010
  • Сообщений: 744
  • Поблагодарили: 180

Re: Как работает .Range.Find.Execute?

Поясню, так как это вопрос почему-то оказался не очевидным форумчанам

Определение Range то читали? Range – представляет какую-то непрерывную область документа. То бишь, главное запомнить, что Range всегда относится к документу. Не к Selection, Paragraph или чему другому, а именно к документу. Так же, Range – это объект (читаем что это такое и как с ними работать).

Здесь свойство Range вернуло вам область документа, соответствующую второму выбранному абзацу:

Не ссылку на объект, а именно объект. Если бы вы запомнили этот объект Range, то работали бы с ним и дальше. Например:

Вы не сделали этого, и объект был удален сразу, после выполнения строки кода:

Следующий вызов вернул еще один новый объект Range. И так далее.

Если ничего не поняли, значит изучение даже основ VBA вы посчитали лишним, а сразу решили попробовать Почитайте какую книжку с примерами, можно и справку глянуть. Главное — читать с начала и подряд. Изучая основы (чего бы то ни было) бессистемным образом (на форумах) люди гробят свое и чужое время. Как говорится: У семи нянек дитя без глазу

12 Ответ от Fck_This 21.03.2018 09:50:59

  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как работает .Range.Find.Execute?

Если ничего не поняли, значит изучение даже основ VBA вы посчитали лишним, а сразу решили попробовать Почитайте какую книжку с примерами, можно и справку глянуть. Главное — читать с начала и подряд. Изучая основы (чего бы то ни было) бессистемным образом (на форумах) люди гробят свое и чужое время. Как говорится: У семи нянек дитя без глазу

Фе, какой вы сноб. Читать сначала и подряд — ужасно скучно. Считаю, что для VBA достаточно читать справку при составлении кода, но читать стоит внимательно.

Поиск и замена текста с помощью VBA в Word

Поиск и замена текста с помощью VBA в Word

Хотя это звучит и несколько необычно, но Find — это объект Word VBA. Объекты Find принадлежат диапазонам и выделенным областям. Для обнаружения или форматирования текста с помощью объекта Find вам потребуется выполнить следующие действия.

1. Получите доступ к объекту Find для определенного диапазона или выделенной области. Если вам необходимо просмотреть целый документ, используйте свойство Content объекта Document для получения доступа к соответствующему диапазону, как показано ниже:

2. Определить свойства объекта Find в соответствии с тем, что же вы ищете и как именно вы хотите проводить поиск.

3. Вызвать метод Execute объекта Find. Соответствующий пример приведен ниже:

Для свойств, значения которых явно вы задать не можете, объект Find выбирает параметры, использованные последними или те, которые в настоящий момент заданы в диалоговом окне Найти и заменить программы Word. Именно по этой причине вам всегда следует включать метод Clear Formatting перед началом нового поиска- он позволяет убрать все ранее определенные для проведения поиска параметры форматирования.

Работа с найденным текстом

Основная работа метода Execute — обнаружение первого экземпляра искомого текста или форматирования в указанном диапазоне или выделенной области. После выполнения этого метода вам прежде всего следует определить, было ли найдено то, что вы ищете. Для подобной проверки используйте свойство Found объекта Find совместно с инструкцией If. Then, как показано на примере следующей заготовки программного кода:

If .Found = True Then

(выполнение определенных действий с найденным текстом)

(отображение соответствующего сообщения)

Если метол Execute нашел необходимый текст, исходный диапазон или выделенная область переопределяются таким образом, чтобы содержать найденный текст. Это очень важный момент, поскольку это означает, что вы можете работать с найденным текстом посредством свойств и методов исходного объекта. В следующем примере, представляющем собой расширенный вариант первого фрагмента кода из настоящего раздела, инструкция .Parent. Italic = True обращается к родительскому объекту по отношению к объекту Find, т.е. диапазону OpenRange. При выполнении этой инструкции диапазон OpenRange теперь содержит только найденный фрагмент текста, так как только в нем предусмотрено форматирование курсивом:

Читать еще:  Vba адрес активной ячейки

If .Found = True Then

MsgBox «No pogosticks found.»

Объект Reolacement принадлежит (а значит, является его свойством) объекту Find. При написании кода для операции поиска и замены вам следует задать свойства и выполнить методы объекта Replacement.

Следующий фрагмент кода заменяет все экземпляры фразы pogosticks словом skateboards. Выделенная область изменяется при выполнении критерия поиска, поскольку доступ к объекту Find осуществляется через объект Selection:

.Execute Replace := wdReplaceAll

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

Похожие главы из других книг:

Поиск и замена данных

Поиск и замена данных В программе HtmlPad реализована возможность быстрого поиска данных. Этот механизм полезно использовать при работе с большими программными кодами или с большими объемами данных, поскольку поиск требуемой информации вручную (например, путем просмотра

Поиск и замена данных

Поиск и замена данных В программе Extra Hide Studio имеется удобный механизм для быстрого поиска и замены данных. Эта возможность особенно актуальна при работе с большими исходными кодами, поскольку поиск данных путем просмотра всего кода может занять слишком много времени, и к

Глава 2 Подготовка текста в Microsoft Word

Глава 2 Подготовка текста в Microsoft Word • Общие сведения о Word 2007• Основные правила форматирования• Вставка стандартных блоков в документ• Нумерация страниц и колонтитулы• Проверка правописания, поиск синонимов, перевод слов• Сноски и закладки• Настройка параметров

3.1. Поиск и замена фрагментов

3.1. Поиск и замена фрагментов Текстовый редактор успешно справляется с поиском и заменой текста в отдельном файле. Однако, если это же нужно сделать сразу в нескольких файлах, лучше воспользоваться специальными программами, с помощью которых можно заменить фрагменты

Поиск и замена текста

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

Поиск и замена форматирования

Поиск и замена форматирования Для поиска текста с определенным форматированием используйте свойства объекта Find, касающиеся форматирования. Они идентичны свойствам, используемым при работе с форматированием диапазона или выделенной области, как я уже отмечал в разделе

Автоматический поиск и замена данных

Автоматический поиск и замена данных В процессе работы иногда возникает необходимость быстро найти те или иные данные (слово, текстовый фрагмент и т. д.) либо заменить одни данные на другие. Для решения такой задачи в Publisher 2007 реализован механизм автоматического поиска и

Поиск и замена

Поиск и замена В новой версии Excel был полностью изменен пользовательский интерфейс и расширены функциональные возможности средства Найти и заменить. Теперь можно с помощью одной операции производить поиск и замену по всем листам книги, повторно выполнять запросы поиска

Поиск и замена символов

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

Глава 2 Подготовка текста в Microsoft Word

Глава 2 Подготовка текста в Microsoft Word Microsoft Word – пожалуй, самая популярная на сегодняшний день программа, предназначенная для работы с текстами. Продукт компании Microsoft обладает всеми необходимыми возможностями, связанными с набором и правкой текстов любой сложности.

5.7. Поиск и замена

5.7. Поиск и замена В документе можно производить автоматический поиск текста и замену его другим.Поиск и замена ведется по введенному образцу. Если в качестве образца указано слово «ход», то компьютер найдет и слово «пароход», если предварительно не поставить условие, что

13.3.4. Поиск и замена текста

13.3.4. Поиск и замена текста Как вы уже догадались, окно Найти и заменить используется не только для перехода на нужную страницу. Вкладка Найти используется для поиска текста. Для быстрого доступа к этой вкладке нажмите Ctrl+F или выберите команду меню Правка, Найти. Нажмите

Поиск и замена

Поиск и замена Для поиска в тексте документа нужного слова или сочетания символов служит окно поиска и замены (рис. 9.19), которое открывается нажатием Ctrl+F. Если надо, чтобы оно сразу открылось как окно замены, используйте сочетание Ctrl+H. Рис. 9.19. Окно поиска и замены.Для

Поиск и замена фрагментов фильма

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

Поиск и замена текста

Поиск и замена текста Поиск определенного слова или фразы в большом документе является довольно непростой задачей, но ее можно значительно упростить, если воспользоваться командой Главная ? Редактирование ? Найти. В появившемся окне (рис. 5.20) введите искомый текст и

Поиск и замена данных

Поиск и замена данных По современным меркам таблица с несколькими тысячами записей считается небольшой, но даже в такой таблице ручной поиск или отбор нужной информации может занять продолжительное время. С помощью средств поиска, сортировки и фильтрации нужные данные

Word find execute

Невидимка Vingrad’а

Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59

Бывалый

Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: 2
Всего: 3

люди! помогите пожалуйста. та же проблема. немного другие симптомы. у меня лаконичнее сообщение об ошибке: метод файнд фейлед — и привет. вот код:

что интересно — так и когда я уже тут убрал меседжбокс для сообщения об ошибке — то вылетать и падать перестало — просто не делает ничего полезного :(. а стока та — в которой по идее сообщение об ошибке должно быть — так ода блин пустая :(. полтергейст полный.

или подскажите — может другой способ есть? мне нужно чтобы в библиотечке на вб6 делался поиск и замена — при невидимом ворде. нуили фиг с ним — можно уже и при видимом. меня убивают тут уже практически — а я на отладке одной строчки застрял на сутки.

да — что интересно: на машине с ХР-офисом падало и вылетало в любом варианте. а вот сейчас на -м пробую из ехе вот так:

Private Sub Command2_Click()
Dim wrd_app As Word.Application
Dim wrd_doc As Word.Document
Dim fnd As String, rpl As String
On Error Resume Next
Set wrd_app = GetObject(, «Word.Application»)
If Err.Number <> 0 Then
Set wrd_app = CreateObject(«Word.Application»)
Err.Clear
End If
On Error GoTo 0
Set wrd_doc = wrd_app.Documents.Open(App.Path + «test.doc»)

fnd = InputBox(«find:»)
rpl = InputBox(«replace:»)

wrd_doc.Content.Find.Execute FindText:=fnd, ReplaceWith:=rpl, Replace:=wdReplaceAll

так это блин работает. странно.
помогите плз разобраться с хренью этой.

Читать еще:  Ip адрес маршрутизатора

Word find execute

Есть функция:

Procedure FindAndReplaceInWordDoc(WD:TWordDocument;Const oStr,nStr:string);
Var
oldString, newString, Replace:OleVariant;
Begin
//Замена всех строк oStr на строку nStr в открытом документе Word2000
Replace :=wdReplaceAll; oldString:=oStr; newString:=nStr;
WD.Range.Find.Execute(oldString, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, newString, Replace,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
End;

Она используется ШИРОКО в коде нескольких программ. Происходит замена некоторых строк из шаблона (например @Up ) на строки, сформированные программой.
Среда — Delphi 5 + SP#1, Word 2000 + SP#3, используются компоненты те, что для Office 2000 (dcloffice2k50.bpl).

В случае если длина строки больше 255 символов получаем надпись «Слишком длинный строковый параметр». Что делать?

Не подскажите ли, как обойти данное ограничение?


MBo © ( 2004-12-07 20:20 ) [1]

>В случае если длина строки больше 255 символов получаем надпись «Слишком длинный строковый параметр». Что делать?

составлять строку из нескольких с помошью «+»


YUKLA © ( 2004-12-07 20:34 ) [2]

Спасибо
Но, к сожалению, так нельзя. Прийдется переписывать связанные программы, которые вызывают данную функцию. А это — проблематично.

Можно ли каким-нибудь ИНЫМ образом произвести замену строки на другую в открытом документе MS Word?

С уважением.
P.S. Может быть, я Вас неправильно понял? Что значит «составлять строку из нескольких с помошью «+»»? Она у меня и так составляется из нескольких с помощью «+», а потом результат передается указнной выше функции.


Leonid Troyanovsky ( 2004-12-07 20:52 ) [3]

YUKLA © (07.12.04 20:12)

Procedure FindAndReplaceInWordDoc(WD:TWordDocument;Const oStr,nStr:string);

Вот скажи мне, уважаемый, ведь этот вопрос был же размещен
в rsdn? И уже там он оброс некоторыми подробностями.
Например, автор знает как сделать оное на VBA, но
не знает как на дельфи.

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

Ты скажи, ты скажи, что ты хочешь, что ты хочешь 😉


YUKLA © ( 2004-12-07 21:06 ) [4]

Вот, например, с сайта Microsoft предлагается такое решение:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q181110

Что касается публикации в других форумах, то это вопрос был размещен и в Delphi Kingdom.

Вопрос срочный, а ответов по существу нет.


Leonid Troyanovsky ( 2004-12-07 22:15 ) [5]


> YUKLA © (07.12.04 21:06) [4]

> Вот, например, с сайта Microsoft предлагается такое решение:
> http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q181110

Ну, и, что мешает оному воплощению?


YUKLA © ( 2004-12-07 22:19 ) [6]

Пробовал, не получается. 😉

Не уж то никто не сталкивался? Я весь Гугль перерыл с Альтавистой в придачу. Нигде ничего внятно не написано. Вариант Микрософт я, увы, на Delphi адекватно перевести не смог. Может быть, кто-нибудь поможет?


Cobalt © ( 2004-12-07 22:28 ) [7]

2 YUKLA © (07.12.04 22:19) [6]
И что же конкретно у тебя не получилось?
Давай разберёмся вместе.


YUKLA © ( 2004-12-07 22:41 ) [8]

пример Майкрософт говорит о косвенной проблеме и приводит косвенное ее решение. В данном сулчае (в базе знаний Майкрософт) речь идет о «полях», тогда как у меня — не поля, а просто текст.

Конкретно — нужно вот что. Есть шаблон *.doc, в котором вместо слов (или вообще абзацев) стоят слова-заглушки («@Up»,»@Who» и т.д.)

Программа готовит нужный текст и заменяет указанной выше функцией ВСЕ вхождения «слов-заглушек» в шаблоне ( а их — вхождений — может быть несколько).

Чисто банально это решается разделением заглушек на часть (типа «@Up1», «@Up2» и т.д.). Но это некузяво и к тому же потребует как переписывать сами программы, так и переделывать шаблоны.


Leonid Troyanovsky ( 2004-12-07 22:55 ) [9]


> YUKLA © (07.12.04 22:19) [6]
> Пробовал, не получается. 😉

Вот отсюда и нужно подробнее.


Leonid Troyanovsky ( 2004-12-07 23:05 ) [10]


> YUKLA © (07.12.04 22:41) [8]

> пример Майкрософт говорит о косвенной проблеме и приводит
> косвенное ее решение. В данном сулчае (в базе знаний Майкрософт)
> речь идет о «полях», тогда как у меня — не поля, а просто
> текст.
>
> Конкретно — нужно вот что. Есть шаблон *.doc, в котором
> вместо слов (или вообще абзацев) стоят слова-заглушки («@Up»,»@Who»
> и т.д.)
>
> Программа готовит нужный текст и заменяет указанной выше
> функцией ВСЕ вхождения «слов-заглушек» в шаблоне ( а их
> — вхождений — может быть несколько).

Гы. Что нужно чтобы вскипятить чайник?
1. Налить воду
2. Включить чайник.

Что нужно, чтобы вскипятиь полный чайник? Вылить воду
и далее по инструкции.

Ну замени свои слова на поля, а далее по прописи.
Если уж не можешь сделать свою FindAndReplace.


YUKLA © ( 2004-12-07 23:12 ) [11]

Вариант, который я пробовал «преевести в Delphi»


How to set the result of a text formfield using VBA, if the string is longer then 256 characters

Article contributed by Dave Rado

If you use:

Dim FmFld As FormField, Str1 As String
Str1 = (a long string > 256 characters)

Set FmFld = ActiveDocument.FormFields(1)
FmFld.Result = Str1

You get an error: “String too long” (a ridiculous “design” feature, given that you can do it manually without problems!).

Same if you use:

ActiveDocument.Formfields(«Text1»).Result = Str1

You can get round this by using:

ActiveDocument.Unprotect
FmFld.Range.Fields(1).Result.Text = Str1
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True

Or if you»re referring to the formfield by name:

ActiveDocument.Unprotect
ActiveDocument.Bookmarks(«Text1»).Range.Fields(1).Result.Text = Str1
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True

Пусть мы ищем строку «@Up» как Bookmark
Т.е. пишем

Это уже ошибка, а как иначе сделать? Т.е., как работать с свойсвтом Bookmarks? Т.е. как внятно перевести приведенный выше код в Delphi?


Leonid Troyanovsky ( 2004-12-07 23:46 ) [12]


> YUKLA © (07.12.04 23:12) [11]
> Вариант, который я пробовал «преевести в Delphi»
..
Пусть мы ищем строку «@Up» как Bookmark

Вот пример из хелпа ВБ, как искать

With Selection.Find
.Forward = True
.ClearFormatting
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdFindContinue
.Execute FindText:=»Microsoft»
End With

Ежели слово найдено и выделено, что мешает его заменить,
т.е. TypeText?


YUKLA © ( 2004-12-07 23:57 ) [13]

Блин. Кто, интересно, издевется!

МНЕ VB НЕ НУЖЕН! Я В НЕМ НЕ РАЗБИРАЮСЬ.

Мне бы пример как сделать АНАЛОГ Range.Find.Execute в Delphi

Кто-нибудь может ПОМОЧЬ ПО СУЩЕСТВУ? Без «пальцев»?


Leonid Troyanovsky ( 2004-12-08 00:09 ) [14]


> YUKLA © (07.12.04 23:57) [13]

> МНЕ VB НЕ НУЖЕН! Я В НЕМ НЕ РАЗБИРАЮСЬ.

Ну, раз сам не знаешь, найми кого-нибудь знающего.


YUKLA © ( 2004-12-08 08:21 ) [15]

Сам решил проблему. Помощи от форума — РОВНО НОЛЬ. Треп один.

Итого. Решение проблемы «стока длинее 255 байт».
— Встречаем в шаблоне строку для замены (например, «@Up»)
— В случае, если длина строки ЗАМЕНЫ более 255 байт выполняем предварительную замену строки «@Up» на «@Up#1@Up#2. @Up#N»
— Делим строку ЗАМЕНЫ на куски

Ссылка на основную публикацию
Adblock
detector