Vba word найти и скопировать текст
32 комментария для “VBA Excel. Содержание рубрики”
Здравствуйте! У Вас нет темы по работе с фильтром. Можно проконсультироваться на этот счёт?
Здравствуйте, Сергей!
Задавайте вопрос, постараюсь ответить.
Спасибо, Евгений! Имеется в Excel столбец с включённым автофильтром. Можно ли программно запустить окно фильтра для выбора значений? Т.е. не руками нажимать на иконку фильтра, а заставить окно открываться с помощью макроса. Спасибо за ответ.
Да, это возможно:
Сергей, уточните вопрос: нужно программно нажать кнопки Ok и Отмена или отследить, какая из них была нажата?
Евгений, я разобрался, почему не выводилось окно с фильтром.
Пример отслеживания нажатий кнопки «OK» автофильтра. На нажатие кнопки «Отмена» код не реагирует.
myString = Range ( "A1" ) . CurrentRegion . SpecialCells ( xlCellTypeVisible ) . Address myString1 = Range ( "A1" ) . CurrentRegion . SpecialCells ( xlCellTypeVisible ) . Address If Not Intersect ( ActiveCell , Range ( "A1" ) ) Is Nothing ThenRange("A1").CurrentRegion можно заменить на имя таблицы.
Евгений, а формулу в поле B2 оставлять или её можно удалить?
Сергей, событие Worksheet_Calculate() не зависит от команды SendKeys "%" . Ограничение стоит здесь:
If Not Intersect ( ActiveCell , Range ( "A1" ) ) Is Nothing ThenКод в процедуре Worksheet_Calculate() срабатывает только когда активна ячейка Range("A1") . Если заменить в этой строке Range("A1") на диапазон строки заголовков таблицы, тогда код будет срабатывать при любой активной ячейке в заголовке.
В столбце «B» не должно быть пустых ячеек до последней строки таблицы.
Как определить в VBA есть узор в ячейке?
If ActiveCell . Interior . Pattern = xlPatternNone ThenДобрый день! Никак не могу решить проблему с заблокированным автофильтром на защищенном макросом (нашел на форумах) листе. Подскажите пожалуйста, куда и какую строчку нужно добавить в макрос, чтобы при открытии файла был активен автофильтр:
Set ws = ThisWorkbook . Sheets ( 1 ) 'можно указать любой лист книги 'устанавливаем защиту на все ячейки рабочего диапазона листа 'снимаем защиту только с пустых ячеек рабочего диапазона листа Set rr = ws . UsedRange . SpecialCells ( xlCellTypeBlanks ) Private Sub Workbook_BeforeClose ( Cancel As Boolean )Добрый день, Владислав!
Замените строку
Добрый день, Евгений!
ОГРОМНОЕ СПАСИБО. :))
Здравствуйте, помогите, пожалуйста, решить задачу((
Здравствуйте, Рафия!
С разработкой кредитного калькулятора вам помогут только за плату на бирже фриланса.
Добрый день, Евгений! Я только начинаю работать с VBA. Помогите, пожалуйста, прописать код для автоматического перемещения курсора на ячейку вправо после заполнения предыдущей.
Здравствуйте, Ева! Для перемещения фокуса в ячейку справа код VBA не нужен: используйте для этого клавишу «Tab» или настройте клавишу «Enter» для перехода вправо (Файл >> Параметры >> Дополнительно).
Спасибо за ответ! Да, но это надо делать вручную; речь идёт об автоматическом перемещении курсора.
Выборка из текста (файл ms word) предложений и копирование в новый файл (ms word) с определенным форматом
Добрый день. Очень нужна помощь в создании макроса. Есть файлы в которых содержатся вопросы и.
Копирование текста в Word
Всем привет, имеется некоторый текст в Word(первый текст). Мне нужно провести над ним некоторые.
Работать в Word, не открывая документы (работа с закрытыми документами Word)
Дайте ссылку, как работать с закрытыми документами Word. У меня есть 5 шаблонов. Я хочу во всех.
"Пусть надо скопировать текст из текущего файла в новый документ,
' с начала первой страницы, до 11 (включительно)".
> Вместо Range:=r пробуйте Range:=rng
Да, глупая ошибка - я корректировал код, чтобы громоздким не был, только основное, не исправил перед отсылкой. Всё равно та же ошибка в том же месте, т.е.:
' ЗДЕСЬ ВЫДАЁТ ОШИБКУ: Run-time error '13' Type mismath
tmpDoc.Content.InsertFile FileName:=SourceFile, Range:=rng, _
ConfirmConversions:=False, Link:=False, Attachment:=False
' "Пусть надо скопировать текст из текущего файла в новый документ,
' с начала первой страницы, до 11 (включительно)".
Dim rng As Range, s1 As Range, s2 As Range
Dim bm As Bookmarks
Dim tmpDoc As Document
Set bm = ActiveDocument.Bookmarks
' Устанавливаю текущее положение - первая страница
Set s1 = Selection.GoTo(What:=wdGoToPage, Which:=wdGoToFirst, Count:=1, Name:="")
' Создаю закладку
bm.Add ("bm1")
' Устанавливаю текущее положение - 12 страница
Set s2 = Selection.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Count:=12, Name:="")
' Создаю закладку
bm.Add ("bm2")
' Выделяю область
Set rng = ActiveDocument.Range(Start:=bm("bm1").Start, End:=bm("bm2").Start - 1)
' Создаю новый документ
Set tmpDoc = Application.Documents.Add '(Visible:=False)
' Вставляю текст
' ЗДЕСЬ ВЫДАЁТ ОШИБКУ: Run-time error '13' Type mismath
tmpDoc.Content.InsertFile FileName:=SourceFile, Range:=rng, _
ConfirmConversions:=False, Link:=False, Attachment:=False
tmpDoc.Close
- вставленный вручную (Word 2003: Вставка - Разрыв. - новую страницу или новую колонку);
- устанавливаемый программой Word (его видно между страницами в режиме просмотра документа Обычный режим).
ActiveWindow - чтобы понять, что это такое, нужно сделать следующее:
Word 2003 - Окно - Новое. В результате на Панели задач Windows (в самом низу монитора) появится ещё одна кнопка документа: т.е. один и тот же документ может быть открыт несколько раз. Зачем это надо? Я этим никогда не пользовался за всё время работы с Word. Могу предположить, зачем это надо, - чтобы просматривать документ в разных местах одновременно: т.е. в одном окне можем смотреть начало документа, а в другом окне - конец документа и сравнивать что-то в них.
Panes - чтобы понять что такое Panes:
Word 2003 - вставьте сноску (Вставка - Ссылка - Сноска. - Вставить). В результате в документ будет вставлена сноска. Далее: Вид - Обычный - Вид - Сноски. В результате внизу появилось что-то - это и есть Pane: т.е. в данной ситуации у нас два Pane: первый Pane - это собственно документ, а второй Pane - это что-то, связанное со сносками.
У документа всегда есть один Pane - это собственно сам документ. И этот Pane имеет порядковый номер всегда 1 (Panes(1)).
Итак строку кода:
Активный документ - Активное окно - первая Pane - первая страница - первый разрыв на странице (кроме разрыва страницы на странице может быть ещё разрыв раздела) - место в документе, занимаемое этим разрывом страницы (или порядковый номер символа, находящегося вначале страницы. Порядковый номер считается сначала документа) - Start - начало разрыва страницы (начало и конец у разрыва страницы равны).
Подскажите, кто знает: как "буквально", как это происходит в Word-е, копируется ЧАСТЬ ДОКУМЕНТА (не только текст) и вставляется в другой документ. Из того что знаю: используется буфер обмена (мне это не мешает, а бы работало автоматически), но я не знаю как им пользоваться программно.
abc,методы Copy и Paste. Больше ничем нельзя сохранить форматирование текста.
Мне не нравится использовать буфер обмена в программировании: я считаю, должно быть что-нибудь более развитое и цивилизованное.
Чтобы проверить работу кода: в активном документе должно быть как минимум 2 страницы; документ, в который копируем, должен быть открыт и должен называться Документ2 или Документ2.doc.
Спасибо огромное - вроде как работает, сейчас всё переделаю, и выложу код. Я пока искал решение, часто наталкивался на подобную задачу.
Мне самому не нравится не динам. программирование и через разного рода посредников (типа буфера).
Сейчас важно чтобы знакомый это не вручную делал, пусть из-за буфера будет не оптимально, немного дольше, но НА МНОГО быстрее, чем в ручную.
Ещё такой вопрос (раз так пошло):
А если документ основан на другом шаблоне (не Normal.dot), как ещё и форматирование с шаблона прикрепить.
Привет.
Моя программа сохраняет название стилей, а сами настройки стилей берёт из шаблона по умолчанию (Normal.dot) - такой вывод я сделал на основании того, что форматирование осталось, но стало другим (изменились даже параметры страницы).
А если документ основан на другом шаблоне, то всё форматирование будет описанное по шаблону Normal.dot. Вот я и хочу определить на основе какого шаблона был написан документ из которого идёт копирование (или можно указать в новом документе в качестве шаблона исходный документ) и сделать скопированный документ на этом шаблоне.
Или можно как-то при создании документа указать на основании кого документа или шаблона его создавать.
Добавлено через 15 минут
Там при создании нового документа Application.Documents.Add Можно указать шаблон, на сонове которого надо создать документ. Свойство Template:=srcDoc.FullName.
Всё огромное спасибо за помощь. Сейчас исправлю и выложу что получилось.
Добавлено через 31 минуту
В общем задача состояло в том, чтобы разбить один большой документ на несколько, через определённое количество страниц (в документе должно быть больше одной страницы).
Замечание:
1. код работает правильно только как документ полностью загрузится (все страницы).
2. я писал и проверял код только под OFFICE WORD 2003.
3. Мой макрос называется: SplitFile
Последний вопрос (уже не по теме. лень искать). Как можно создать кнопку на панели для моего макроса и упростить его установку.
Выполняет указанную операцию поиска. Возвращает True, если операция поиска будет успешной. Логическое значение.
Синтаксис
выражения. Выполнение (FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms , Forward , Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)
выражение (обязательно). Переменная, представляюная объект Find.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
FindText | Необязательный | Variant | Текст, который необходимо искать. Используйте пустую строку ("") для поиска только форматирования. Вы можете искать специальные символы, указав соответствующие коды символов. Например, "^p" соответствует знаку абзаца, а "^t" соответствует символу вкладки. |
MatchCase | Необязательный | Variant | True, чтобы указать, что текст поиска должен быть чувствительным к делу. Соответствует контрольной окне "Совпадение" в диалоговом окне Найти и заменить (Изменить меню). |
MatchWholeWord | Необязательный | Variant | Правда, чтобы операция поиска найдите только целые слова, а не текст, который является частью более крупного слова. Соответствует диалоговой окне Найти целые слова только в диалоговом окне Найти и заменить. |
MatchWildcards | Необязательный | Variant | True to have the find text be a special search operator. Соответствует контрольной окне Use wildcards в диалоговом окне Найти и заменить. |
MatchSoundsLike | Необязательный | Variant | True, чтобы операция поиска найдите слова, которые звучат так же, как найти текст. Соответствует диалоговой окне "Звуки", как в диалоговом окне Найти и заменить. |
MatchAllWordForms | Необязательный | Variant | Правда, чтобы операция поиска найдите все формы текста поиска (например, "sit" находит "сидя" и "sat"). Соответствует поле Найти все формы слов в диалоговом окне Найти и заменить. |
Forward | Необязательный | Variant | True для поиска вперед (ближе к концу документа). |
Wrap | Необязательный | Variant | Контролирует, что происходит, если поиск начинается в точке, не в начале документа и в конце документа достигается (или наоборот, если форвард настроен на False). Этот аргумент также контролирует, что происходит, если есть выбор или диапазон и текст поиска не найден в выборе или диапазоне. Может быть одним из констант WdFindWrap. |
Format | Необязательный | Variant | Верно, что операция поиска находит форматирование в дополнение к тексту поиска или вместо него. |
ReplaceWith | Необязательный | Variant | Текст замены. Чтобы удалить текст, указанный аргументом Find, используйте пустую строку (""). Вы указываете специальные символы и расширенные критерии поиска так же, как и аргумент Find. Чтобы указать графический объект или другой нетекст в качестве замены, переместите элемент в буфер обмена и укажите "^c" для ReplaceWith. |
Replace | Необязательный | Variant | Указывает, сколько замен необходимо сделать: один, все или нет. Может быть любой константой WdReplace. |
MatchKashida | Необязательный | Variant | True, если поиск операций соответствует тексту с соответствием кашидам в документе на арабском языке. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной. |
MatchDiacritics | Необязательный | Variant | True, если поиск операций совпадает с текстом, соответствующим диакритикам в языковом документе справа налево. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной. |
MatchAlefHamza | Необязательный | Variant | True, если поиск операций совпадает с текстом, соответствующим хамзам alef в документе на арабском языке. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной. |
MatchControl | Необязательный | Variant | True, если поиск операций совпадает с текстом, соответствующим символам управления бидайрекционными в документе языка справа налево. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной. |
MatchPrefix | Необязательный | Variant | True, чтобы соответствовать словам, начиная со строки поиска. Соответствует префиксу Match в диалоговом окне Найти и заменить. |
MatchSuffix | Необязательный | Variant | True, чтобы соответствовать словам, завершаемой строкой поиска. Соответствует поле суффикса Match в диалоговом окне Найти и заменить. |
MatchPhrase | Необязательный | Variant | True игнорирует все символы белого пространства и управления между словами. |
IgnoreSpace | Необязательный | Variant | True игнорирует все пробелы между словами. Соответствует окне Игнорировать символы белого пространства в диалоговом окне Найти и заменить. |
IgnorePunct | Необязательный | Variant | True игнорирует все знаки препинания между словами. Соответствует контрольной окне Игнорировать пунктуацию в диалоговом окне Найти и заменить. |
Возвращаемое значение
Примечания
Если MatchWildcards является true, можно указать символы подтекста и другие расширенные критерии поиска для аргумента FindText. Например, "*(ing)" находит любое слово, которое заканчивается в "ing".
Чтобы найти символ, введите caret (^), ноль (0), а затем код символа. Например, "^0151" соответствует em dash ( — ).
Если иное не указано, заменяющий текст наследует форматирование заменяемого в документе текста. Например, если заменить строку "abc" на "xyz", вхождения "abc" с жирным форматированием заменяются строкой "xyz" с жирным форматированием.
Кроме того, если MatchCase является false, вхождения верхнего текста поиска будут заменены на верхний шкаф версии заменяемого текста, независимо от случая замены текста. В предыдущем примере случаи "ABC" заменяются на XYZ.
Пример
В этом примере находит и выбирает следующее появление слова "библиотека".
В этом примере находятся все вхождения слова "привет" в активном документе и заменяется каждое событие на "привет".
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Поиск и замена выставлены объектами Поиска и Замены. Объект Find доступен в объекте Selection и объекте Range. Действие поиска немного отличается в зависимости от того, имеется ли доступ к объекту Find из объекта Selection или объекта Range.
Поиск текста и его выбор
Если объект Find имеет доступ к объекту Selection, выбор меняется при обнаружении критериев поиска. В следующем примере выбирается следующее появление слова "Hello". Если конец документа достигнут до того, как будет найдено слово "Hello", поиск будет остановлен.
Объект Find содержит свойства, которые относятся к параметрам в диалоговом окне Найти и заменить. Можно установить отдельные свойства объекта Find или использовать аргументы с методом Execute, как показано в следующем примере.
Поиск текста без изменения выбора
Если объект Find имеет доступ к объекту Range, выбор не меняется, но диапазон переопределяется при обнаружении критериев поиска. В следующем примере обнаруживается первое появление слова "синий" в активном документе. Если операция поиска будет успешной, диапазон будет переопределяться и к слову "синий" применяется смелый форматирование.
В следующем примере выполняется тот же результат, что и в предыдущем примере, с использованием аргументов метода Execute.
Использование объекта Replacement
Объект Replacement представляет критерии замены для операции поиска и замены. Свойства и методы объекта Replacement соответствуют параметрам в диалоговом окне Найти и заменить (Изменить меню).
Объект Replacement доступен в объекте Find. В следующем примере все вхождения слова "привет" заменяется на "hello". Выбор изменяется при обнаружении критериев поиска, так как объект Find имеет доступ к объекту Selection.
В следующем примере удаляется жирный форматирование в активном документе. Свойство Bold — true для объекта Find и False для объекта Replacement. Чтобы найти и заменить форматирование, установите поиск и замените текст пустыми строками ("") и установите аргумент Format метода Execute к True. Выбор остается неизменным, так как объект Find имеет доступ к объекту Range (свойство Content возвращает объект Range).
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Читайте также: