Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для извлечения адресов электронной почты - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для извлечения адресов электронной почты (Макросы/Sub)
Макрос для извлечения адресов электронной почты
gsnejniy Дата: Четверг, 13.08.2015, 16:29 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Добрый день, Уважаемые Форумчане!

Ситуация следующая. Есть файл с клиентской базой (прикрепил), там в строках определенного столбца указывается информация о клиентах в том числе и email. Нужен макрос который бы автоматически извлекал адреса электронки которые содержатся на странице и формировал отдельный список. Порыскав по просторам рунета нашел следующий код:
[vba]
Код

Dim coll As Collection

Sub EmailsList()
Dim cell As Range: Application.ScreenUpdating = False
Set coll = New Collection
' перебираем все заполненные ячейки на листе в поисках адресов почты
For Each cell In shs.UsedRange.SpecialCells(xlCellTypeConstants).Cells
ParseAddresses cell.Text ' проверяем очередную ячейку
Next cell

' выводим найденные номера на второй лист
For Each Item In coll
shres.Range("a" & shres.Rows.Count).End(xlUp).Offset(1) = Item
Next
End Sub

Sub cl(): shres.[a4:a65000].ClearContents: End Sub ' очистка таблицы

Sub ParseAddresses(ByVal txt As String)
' ищет в тексте txt адреса электронной почты,
' все найденные адреса добавляются в коллекцию coll
repl1$ = "ZZZXXXZZZ": repl2$ = "ZZZYYYZZZ": On Error Resume Next
txt = Replace(txt, ".", repl1$): txt = Replace(txt, "-", repl2$)
Set RegExp = CreateObject("VBScript.RegExp"): RegExp.Global = True
RegExp.Pattern = "[\w]{1,}@[\w]{1,}" & repl1$ & "[\w]{1,}"
If RegExp.test(txt) Then
Set objMatches = RegExp.Execute(txt)
For i = 0 To objMatches.Count - 1
addr = objMatches.Item(i).Value
addr = Replace(addr, repl1$, "."): addr = Replace(addr, repl2$, "-")
coll.Add addr, addr ' только уникальные адреса
Next
End If
End Sub
[/vba]

Теперь не могу нормально записать этот макрос (не умею попросту), либо сам код неверный, но когда выполняю макрос появляется ошибка - "runtime error 424 object required".
Помогите пожалуйста, подскажите, что мне пошагово нужно сделать.
К сообщению приложен файл: 6272506.xlsm (93.7 Kb)


Сообщение отредактировал Manyasha - Четверг, 13.08.2015, 16:35
 
Ответить
СообщениеДобрый день, Уважаемые Форумчане!

Ситуация следующая. Есть файл с клиентской базой (прикрепил), там в строках определенного столбца указывается информация о клиентах в том числе и email. Нужен макрос который бы автоматически извлекал адреса электронки которые содержатся на странице и формировал отдельный список. Порыскав по просторам рунета нашел следующий код:
[vba]
Код

Dim coll As Collection

Sub EmailsList()
Dim cell As Range: Application.ScreenUpdating = False
Set coll = New Collection
' перебираем все заполненные ячейки на листе в поисках адресов почты
For Each cell In shs.UsedRange.SpecialCells(xlCellTypeConstants).Cells
ParseAddresses cell.Text ' проверяем очередную ячейку
Next cell

' выводим найденные номера на второй лист
For Each Item In coll
shres.Range("a" & shres.Rows.Count).End(xlUp).Offset(1) = Item
Next
End Sub

Sub cl(): shres.[a4:a65000].ClearContents: End Sub ' очистка таблицы

Sub ParseAddresses(ByVal txt As String)
' ищет в тексте txt адреса электронной почты,
' все найденные адреса добавляются в коллекцию coll
repl1$ = "ZZZXXXZZZ": repl2$ = "ZZZYYYZZZ": On Error Resume Next
txt = Replace(txt, ".", repl1$): txt = Replace(txt, "-", repl2$)
Set RegExp = CreateObject("VBScript.RegExp"): RegExp.Global = True
RegExp.Pattern = "[\w]{1,}@[\w]{1,}" & repl1$ & "[\w]{1,}"
If RegExp.test(txt) Then
Set objMatches = RegExp.Execute(txt)
For i = 0 To objMatches.Count - 1
addr = objMatches.Item(i).Value
addr = Replace(addr, repl1$, "."): addr = Replace(addr, repl2$, "-")
coll.Add addr, addr ' только уникальные адреса
Next
End If
End Sub
[/vba]

Теперь не могу нормально записать этот макрос (не умею попросту), либо сам код неверный, но когда выполняю макрос появляется ошибка - "runtime error 424 object required".
Помогите пожалуйста, подскажите, что мне пошагово нужно сделать.

Автор - gsnejniy
Дата добавления - 13.08.2015 в 16:29
Udik Дата: Четверг, 13.08.2015, 16:34 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
reateObject("VBScript.RegExp")

Скорее всего у Вас не подключён VBScript.RegExp


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
reateObject("VBScript.RegExp")

Скорее всего у Вас не подключён VBScript.RegExp

Автор - Udik
Дата добавления - 13.08.2015 в 16:34
gsnejniy Дата: Четверг, 13.08.2015, 17:24 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Скорее всего у Вас не подключён VBScript.RegExp

Подскажите пожалуйста, что мне нужно сделать?
 
Ответить
Сообщение
Скорее всего у Вас не подключён VBScript.RegExp

Подскажите пожалуйста, что мне нужно сделать?

Автор - gsnejniy
Дата добавления - 13.08.2015 в 17:24
Udik Дата: Четверг, 13.08.2015, 17:39 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Проверить подключена ли библиотека
Цитата

В редакторе макросов VBE в меню Tools выбрать пункт References..
Найти в списке пункт Microsoft VBScript Regular Expressions 5.5 в открывшемся диалоговом окне, поставить возле него галочку и нажать кнопку OK.


Насколько знаю ни одно рег. выражение не даёт 100% гарантии, что не выкинет валидный адрес, об этом куча статей в инете :)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеПроверить подключена ли библиотека
Цитата

В редакторе макросов VBE в меню Tools выбрать пункт References..
Найти в списке пункт Microsoft VBScript Regular Expressions 5.5 в открывшемся диалоговом окне, поставить возле него галочку и нажать кнопку OK.


Насколько знаю ни одно рег. выражение не даёт 100% гарантии, что не выкинет валидный адрес, об этом куча статей в инете :)

Автор - Udik
Дата добавления - 13.08.2015 в 17:39
gsnejniy Дата: Четверг, 13.08.2015, 17:46 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Проверить подключена ли библиотека

Поставил эту галочку и все равно такая же ошибка выскакивает.
 
Ответить
Сообщение
Проверить подключена ли библиотека

Поставил эту галочку и все равно такая же ошибка выскакивает.

Автор - gsnejniy
Дата добавления - 13.08.2015 в 17:46
RAN Дата: Четверг, 13.08.2015, 17:52 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Эта ошибка может быть вызвана разными причинами.
Нужно как минимум знать, на какой строке кода она возникает.

[p.s.]И выкладывать не какой-то файл отдельно и какой-то код отдельно, а тот файл с кодом, где не работает![/p.s.]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 13.08.2015, 17:55
 
Ответить
СообщениеЭта ошибка может быть вызвана разными причинами.
Нужно как минимум знать, на какой строке кода она возникает.

[p.s.]И выкладывать не какой-то файл отдельно и какой-то код отдельно, а тот файл с кодом, где не работает![/p.s.]

Автор - RAN
Дата добавления - 13.08.2015 в 17:52
Udik Дата: Четверг, 13.08.2015, 17:56 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
shs - это что? По идее какой-то объект, но я не нашёл его объявления. Может вы при копировании упустили что-то.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениеshs - это что? По идее какой-то объект, но я не нашёл его объявления. Может вы при копировании упустили что-то.

Автор - Udik
Дата добавления - 13.08.2015 в 17:56
RAN Дата: Четверг, 13.08.2015, 18:01 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
shs - это что?

Это осталось тут

Автор - RAN
Дата добавления - 13.08.2015 в 18:01
KSV Дата: Четверг, 13.08.2015, 18:05 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Добрый день!
Используя ваше рег. выражение, можно так: (UDF) [vba]
Код
Function GetEMail(ByVal Value As String) As String
     With CreateObject("VBScript.RegExp")
         .Pattern = "[\w]{1,}@[\w]{1,}\.[\w]{2,}"
         With .Execute(Value)
             If .Count Then GetEMail = .Item(0)
         End With
     End With
End Function
[/vba]

[p.s.]но можно и без рег. выражений[/p.s.]
К сообщению приложен файл: 6272506.zip (85.0 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеДобрый день!
Используя ваше рег. выражение, можно так: (UDF) [vba]
Код
Function GetEMail(ByVal Value As String) As String
     With CreateObject("VBScript.RegExp")
         .Pattern = "[\w]{1,}@[\w]{1,}\.[\w]{2,}"
         With .Execute(Value)
             If .Count Then GetEMail = .Item(0)
         End With
     End With
End Function
[/vba]

[p.s.]но можно и без рег. выражений[/p.s.]

Автор - KSV
Дата добавления - 13.08.2015 в 18:05
Udik Дата: Четверг, 13.08.2015, 18:14 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Это осталось тут

Ага, имя листа, только не знал что можно вот так напрямую обращаться.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Это осталось тут

Ага, имя листа, только не знал что можно вот так напрямую обращаться.

Автор - Udik
Дата добавления - 13.08.2015 в 18:14
RAN Дата: Четверг, 13.08.2015, 18:47 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ага, имя листа,

Нет, не имя, а кодовое имя.
Это две большие разницы.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Ага, имя листа,

Нет, не имя, а кодовое имя.
Это две большие разницы.

Автор - RAN
Дата добавления - 13.08.2015 в 18:47
gsnejniy Дата: Четверг, 13.08.2015, 18:50 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Добрый день!
Используя ваше рег. выражение, можно так: (UDF)

У Вас судя по всему все получилось. Объясните мне пожалуйста, что мне пошагово нужно сделать чтобы у меня тоже вышло, я честно признаться в макросах дуб дубом)
 
Ответить
Сообщение
Добрый день!
Используя ваше рег. выражение, можно так: (UDF)

У Вас судя по всему все получилось. Объясните мне пожалуйста, что мне пошагово нужно сделать чтобы у меня тоже вышло, я честно признаться в макросах дуб дубом)

Автор - gsnejniy
Дата добавления - 13.08.2015 в 18:50
gsnejniy Дата: Четверг, 13.08.2015, 18:51 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
P.S.
И выкладывать не какой-то файл отдельно и какой-то код отдельно, а тот файл с кодом, где не работает!

Извиняюсь, в будущем обязательно учту. Я просто не уверен, что правильно могу его в файл записать, мне бы прям пошагово объяснить.
 
Ответить
Сообщение
P.S.
И выкладывать не какой-то файл отдельно и какой-то код отдельно, а тот файл с кодом, где не работает!

Извиняюсь, в будущем обязательно учту. Я просто не уверен, что правильно могу его в файл записать, мне бы прям пошагово объяснить.

Автор - gsnejniy
Дата добавления - 13.08.2015 в 18:51
KSV Дата: Четверг, 13.08.2015, 19:01 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Объясните мне пожалуйста, что мне пошагово нужно сделать чтобы у меня тоже вышло

В сообщении, во вложенном архиве, ваш файл - откройте его, в ячейках столбца N прописана пользовательская функция GetEMail, нажмите Alt+F11, в открывшемся окне VBE увидите код этой пользовательской функции (или можете код прямо из сообщения скопировать), вставьте этот код в стандартный модуль своего рабочего файла и в нужных ячейках можете прописывать функцию GetEMail, по аналогии с вашим файлом-примером.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
Объясните мне пожалуйста, что мне пошагово нужно сделать чтобы у меня тоже вышло

В сообщении, во вложенном архиве, ваш файл - откройте его, в ячейках столбца N прописана пользовательская функция GetEMail, нажмите Alt+F11, в открывшемся окне VBE увидите код этой пользовательской функции (или можете код прямо из сообщения скопировать), вставьте этот код в стандартный модуль своего рабочего файла и в нужных ячейках можете прописывать функцию GetEMail, по аналогии с вашим файлом-примером.

Автор - KSV
Дата добавления - 13.08.2015 в 19:01
RAN Дата: Четверг, 13.08.2015, 19:03 | Сообщение № 15
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Объясните мне пожалуйста, что мне пошагово нужно сделать чтобы у меня тоже вышло

Почитать
Я просто не уверен, что правильно могу его в файл записать,

Как в Простоквашино.
"Для того, чтобы что-то ненужное продать, нужно сначала это ненужное купить"
Сделали не правильно, показали, а после спрашивайте, что не правильно.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Объясните мне пожалуйста, что мне пошагово нужно сделать чтобы у меня тоже вышло

Почитать
Я просто не уверен, что правильно могу его в файл записать,

Как в Простоквашино.
"Для того, чтобы что-то ненужное продать, нужно сначала это ненужное купить"
Сделали не правильно, показали, а после спрашивайте, что не правильно.

Автор - RAN
Дата добавления - 13.08.2015 в 19:03
gsnejniy Дата: Пятница, 14.08.2015, 09:27 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Ненужную цитату удалил
Ок.


Сообщение отредактировал _Boroda_ - Пятница, 14.08.2015, 10:19
 
Ответить
СообщениеНенужную цитату удалил
Ок.

Автор - gsnejniy
Дата добавления - 14.08.2015 в 09:27
gsnejniy Дата: Пятница, 14.08.2015, 09:46 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Ненужную цитату удалил
Огромнейшее Вам спасибо!

Все работает, все очень здорово!


Сообщение отредактировал _Boroda_ - Пятница, 14.08.2015, 10:19
 
Ответить
СообщениеНенужную цитату удалил
Огромнейшее Вам спасибо!

Все работает, все очень здорово!

Автор - gsnejniy
Дата добавления - 14.08.2015 в 09:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для извлечения адресов электронной почты (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!