Статьи из блога
Макрос извлечения адресов e-mail и размещение их в новом документе
Максим интересуется:
Имею большое количество документов с адресами e-mail. Их-то мне и нужно собрать воедино, в один столбец, а еще лучше сразу в ексель.
Для решения этой задачи воспользуйтесь следующим макросом. Он извлекает все адреса e-mail из текста оригинала документа и помещает их столбиком в новый документ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Sub CopyAddressesToOtherDoc() 'извлекает все email из документа и размещает в новом документе столбиком Dim Source As Document, Target As Document, myRange As Range Set Source = ActiveDocument Set Target = Documents.Add Application.ScreenUpdating = False Source.Activate Selection.HomeKey Unit:=wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(findText:= "[+0-9A-z._-]{1;}\@[A-z.]{1;}" , _ MatchWildcards:= True , Wrap:=wdFindStop, Forward:= True ) = True Set myRange = Selection.Range Target.Range.InsertAfter myRange & vbCr Loop End With Selection.HomeKey Unit:=wdStory Target.Activate End Sub |
Если вы не знаете, как подключить к документу и применить эти макросы, изучите следующие заметки с сайта:
Создание макроса из готового кода
Рубрика: Вопрос-Ответ, Макросы
Метки: макросы
Просмотров: 34821
Подписаться на комментарии по RSS
Версия для печати
Метки: макросы
Просмотров: 34821
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 вопросов и ответов по редактору Word (1 часть)
- 3 способа очистки списка недавно открытых документов
- Word 2007: добавляем свою вкладку и свои команды
- Word 2007: полотно, рисунки, линии
- Word 2007: смена формата сохранения файла
- Word 97 - решение проблемы с отображением символов на линейке
- Абзац с цветным фоном
- Автоматизация текстового набора в Word
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Белый текст на синем фоне в Word 2007
- Быстрая смена ориентации страниц документа
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрый ввод текста с помощью команды =rand()
- Ввод повторяющихся фрагментов текста в Word 2007
- Ввод часто повторяющихся фрагментов текста
- Вертикальное выравнивание текста
- Возможно ли запретить копирование текста из документа Word?
- Вопрос о работе с графиками (диаграммами) в Word
- Вопросы и ответы о гиперссылках в редакторе Word
Комментариев: 31
Я попробовал в адресе vfjkz@i-systems.ru распознаёт только vfjkz@i. Как исправить?
Добавь в эту строку
Do
While
.Execute(findText:=
"[+0-9A-z._-]{1;}\@[A-z.]{1;}"
, _
После «[A-z» еще и дефис «-»
У меня есть список адресов, как изменить макрос чтобы выбрать только яндекс или рамблер почту
Если быстро, то вот так. Хотя можно оптимизировать
Sub
CopyAddressesToOtherDoc()
'извлекает все email из документа и размещает в новом документе столбиком
Dim
Source
As
Document, Target
As
Document, myRange
As
Range
Set
Source = ActiveDocument
Set
Target = Documents.Add
Application.ScreenUpdating =
False
Source.Activate
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
With
Selection.Find
Do
While
.Execute(findText:=
"[+0-9A-z._-]{1;}\@(rambler)[A-z.-]{1;}"
, _
MatchWildcards:=
True
, Wrap:=wdFindStop, Forward:=
True
) =
True
Set
myRange = Selection.Range
Target.Range.InsertAfter myRange & vbCr
Loop
End
With
Source.Activate
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
With
Selection.Find
Do
While
.Execute(findText:=
"[+0-9A-z._-]{1;}\@(yahoo)[A-z.-]{1;}"
, _
MatchWildcards:=
True
, Wrap:=wdFindStop, Forward:=
True
) =
True
Set
myRange = Selection.Range
Target.Range.InsertAfter myRange & vbCr
Loop
End
With
Selection.HomeKey Unit:=wdStory
Target.Activate
End
Sub
Антон, неужели появилась подсветка кода в комментариях?
Большое спасибо.
Александр, нет, это я отредактировал ваш комментарий, так как он был кракозябрами.
Жалко:((
Имею большое колличество документов с адресами e-mail. Их-то мне и нужно собрать воедино, в один столбец, а еще лучше сразу в ексель
как же сделать привязку к экселю?
Привязка к Excel делается очень просто. В редакторе VBA Tools→References подключить библиотеку Microsoft Excel Object Library и можно работать с Excel как обычно: будут доступны все объекты и методы Excel
Sub
WorkWithExcel()
Dim
xlApp
As
Excel.Application
'Переменная для приложения Excel
Dim
xlWb
As
Excel.Workbook
'Переменная для рабочей книги Excel
Set
xlApp =
New
Excel.Application
'Создаем новый экземпляр приложения
xlApp.Visible =
True
'Делаем приложение видимым
Set
xlWb = xlApp.Workbooks.Add
'Добавляем рабочую книгу
With
xlWb
.Sheets(1).Cells(1, 1) = Documents(1).FullName
'В первую ячейку первого листа записываем полное имя первого документа Word
.SaveAs Documents(1).Path &
"\1.xls"
'Сохраняем рабочую книгу в папку с документом
.Close
'Закрываем рабочую книгу
End
With
Set
xlWb =
Nothing
'Удаляем ссылку на рабочую книгу
xlApp.Quit
'Выходим из приложения Excel
Set
xlApp =
Nothing
'Удаляем ссылку на приложение
End
Sub
а можно сделать так, что бы макрос извлекакл из документа назваия таблиц с номерами и названиями, формат названия таблицы "Таблица 1.2.3 - Название таблицы"
названия таблиц разные и имеют разную длину,
Можно это сделать.
Предлагаю два варианта. Первый макрос работает со всеми таблицами в документе. Поскольку название таблицы обычно содержится в абзаце, который стоит непостредственно перед таблицей, то нужно просто скопировать содержимое этого абзаца
Sub
ExtractTableCaptions1()
'Извлечение названий таблиц из документа
'Для всех таблиц в документе
Dim
oTbl
As
Table
Dim
oResultDoc
As
Document
'Документ, в который будем записывать заголовки таблиц
Dim
oSourceDoc
As
Document:
Set
oSourceDoc = ActiveDocument
'Исходный документ
'Добавляем документ
Set
oResultDoc = Documents.Add
'Перебираем все таблицы в документе
For
Each
oTbl
In
oSourceDoc.Tables
'В новый документ записываем содержимое абзаца, который предшествует таблице
oResultDoc.Range.InsertAfter oTbl.Range.Paragraphs(1).Previous.Range.Text
Next
'Делаем результирующий документ активным
oResultDoc.Activate
End
Sub
Второй макрос работает только с таблицами, которые имеют название. Название для таблиц представляет собой поле SEQ с идентификатором Таблица. Макрос ищет такие поля в документе и копирует содержимое всего абзаца, в котором это поле находится.
Sub
ExtractTableCaptions2()
'Извлечение названий таблиц из документа
'Только для таблиц, имеющих название
Dim
oFld
As
Field
Dim
oResultDoc
As
Document
Dim
oSourceDoc
As
Document:
Set
oSourceDoc = ActiveDocument
Set
oResultDoc = Documents.Add
'Перебираем все поля в документе
For
Each
oFld
In
oSourceDoc.Fields
'Если поле является полем последовательности и в нем есть идентификатор "Таблица"
If
oFld.Type = wdFieldSequence
And
CBool
(InStr(oFld.Code.Text,
"Таблица"
))
Then
'Копируем содержимое абзаца, в котором это поле находится
oResultDoc.Range.InsertAfter oFld.Result.Paragraphs(1).Range.Text
End
If
Next
'Делаем результирующий документ активным
oResultDoc.Activate
End
Sub
А можно отфильтровать все полученные mail, и удалить лишние повторяющиеся.
вот к примеру у меня такая надпись:
http://otvet.mail.ru/question/40769690/#url?to=naumova59@mail.ruhttp://otvet.mail.ru/question/40769690/#url?to=pushkareva-82@mail.ruhttp://otvet.mail.ru/question/40769690/#url?to=svet-lya-4ok@mail.ru
подскажите код макроса, что бы извлечь все E-mail адреса от знака = и до http:// в новый документ столбиком и в случаи повторения E-mail адрес не вписывались в новый документ
подскажите пожалуйста.
Предложу такой вариант: заменить все гиперссылки на знак абзаца, затем это отсортировать, а уже отсортированные абзацы легко проверить на повторяемость. Могу реализовать всё это за вознаграждение.
Спасибо не надо.
Люди подсказали уже
кому надо ловите
Sub
RemoveHrefs()
Dim
NewDoc
As
Document
Dim
CurrDoc
As
Document
Set
CurrDoc = ActiveDocument
Set
NewDoc = Documents.Add
NewDoc.Range.InsertAfter CurrDoc.Range.Text
NewDoc.Range.Find.Execute FindText:=
"http:*="
, _
MatchWildcards:=
True
, _
ReplaceWith:=
"^0013"
, _
Replace:=wdReplaceAll
End
Sub
Но ведь от повторений это не избавляет. А макрос мой©
твой не отрицаю *Александр Витер*
А как от повторения избавится?)
И,чтоб в место абзаца ^0013 было с новой строки
Я же написал: сортировать, а затем, перебирая абзацы один за другим удалять повторы
А почему ты считаешь, что абзац и новая строка это разные понятия в данном случае? Строго говоря, разные, но в этом случае — одно и то же
когда копируешь результаты в блокнот, отображается все в сроку, а не столбиком почему-то.
КАК удалить повторяющиеся АДРЕСА?
Через "Поиск и замену". На сайте полно заметок и комментариев по этому вопросу.
В excell есть такая возможность: Данные-расширеный фильтр (Дополнительно в 2007),выбираем диапазон где нужна фильтрация, ставим флажоки "копировать результат в другое место" и "только уникальные записи" потом выделяем диапазон куда будет скопирован результат
Удачи!
А можно ли в екселе сделать с помощью макросов так:
в файле вставлено много картинок, которые которые имеют замещающий текст. Так вот, необходимо, что бы замещающий текст остался виден, а картинки пропала. Подскажите кто знает.
После вот этой строчки
Set Target = Documents.Add
создаётся новый документ и прекращается выполнение макроса
есть какие-то мысли?
Здравствуйте!
Данный макрос почему то не работает в Word 2010
Он не совместим с данной версией?
glaza-v-glaza@mail.ru
Дело не в версии. Замените в коде [ и ] на [ и ] соответственно и всё заработает.
тут нет опечатки? мы заменяем и на и?
помогите с MS 2010
В word 2016 необходимо в строке задающий поиск заменить ; на ,
[+0-9A-z._-]{1,}\@[A-z.]{1,}
СПАСИБО!
Спасибо