Sub TransferData()

    AppSettings
Dim StartTime As Variant
Dim UsedTime As Variant
StartTime = VBA.Timer On Error GoTo ErrHandler Dim dHas As Object
Dim dNew As Object
Dim Key As String
Dim OneKey Dim Wb As Workbook
Dim Sht As Worksheet
Dim oSht As Worksheet
Dim OpenWb As Workbook
Dim OpenSht As Worksheet
Dim NewWb As Workbook
Dim NewSht As Worksheet
Dim EndRow As Long, EndCol As Long
Dim i As Long, j As Long
Dim FolderPath As String
Dim FilePath, FilePaths, sMail, arMail, OneAr
Dim MailContent, PhoneContent MailContent = ""
PhoneContent = "" Set dNew = CreateObject("Scripting.Dictionary")
Set dHas = CreateObject("Scripting.Dictionary")
Set Wb = Application.ThisWorkbook
Set Sht = Wb.Worksheets("邮箱列表")
With Sht
EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
If EndRow > 1 Then
Set Rng = .Range("A1").Resize(EndRow, 1)
Arr = Rng.Value
For i = LBound(Arr) To UBound(Arr)
Key = CStr(Arr(i, 1))
dHas(Key) = ""
Next i
End If
End With FolderPath = Wb.Path & "\表格一\"
FilePaths = FsoGetFiles(FolderPath, "*.xls*")
If FilePaths(1) = "None" Then GoTo ErrorExit For Each FilePath In FilePaths
Set OpenWb = Application.Workbooks.Open(FilePath)
Set OpenSht = OpenWb.Worksheets(1)
With OpenSht
EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
Set Rng = .Range("A3:J" & EndRow)
Arr = Rng.Value
For i = LBound(Arr) To UBound(Arr)
sMail = Arr(i, 10)
If Len(sMail) > 0 Then
sMail = Left(sMail, Len(sMail) - 1)
arMail = Split(sMail, ";")
For Each OneAr In arMail
'Debug.Print " OneAr>"; OneAr
Key = RegGet(OneAr, "(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)")
If Len(Key) > 0 Then
'Debug.Print "Key>"; Key
'Debug.Print ">>>>"; Key; " > "; Arr(i, 2); " > "; Arr(i, 1)
dNew(Key) = Array(Key, Arr(i, 2), Arr(i, 1))
MailContent = MailContent & vbCrLf & Key
End If
Next OneAr
End If sPhone = Arr(i, 7)
If Len(sPhone) > 0 Then
sPhone = Left(sPhone, Len(sPhone) - 1)
arPhone = Split(sPhone, ";")
For Each OneAr In arPhone
Key = RegGet(OneAr, "(1\d{10})")
If Key <> "" Then PhoneContent = PhoneContent & vbCrLf & Key
Next OneAr
End If 'If i = 10 Then Exit For
Next i
End With
OpenWb.Close False
Next FilePath '对比去重
For Each OneKey In dHas.keys
If dNew.exits(OneKey) Then dNew.Remove (OneKey)
Next OneKey Set oSht = Wb.Worksheets("_人地址薄")
FilePath = Wb.Path & "\表格二\导出文件" & Format(Now, "yyyymmdd-hhmm") & ".xlsx" Set NewWb = Application.Workbooks.Add
NewWb.SaveAs FilePath oSht.Copy before:=NewWb.Worksheets(1)
Set NewSht = NewWb.Worksheets("_人地址薄")
With NewSht
Set Rng = .Range("A2")
Set Rng = Rng.Resize(dNew.Count, 3)
Rng.Value = Application.Rept(dNew.Items, 1)
End With On Error Resume Next
NewWb.Worksheets(2).Delete
On Error GoTo 0 NewWb.Save
NewWb.Close False PhoneFilePath = Wb.Path & "\txt\导出手机" & Format(Now, "yyyymmdd-hhmm") & ".txt"
PhoneContent = Mid(PhoneContent, 2)
NewTextFile PhoneFilePath, PhoneContent MailFilePath = Wb.Path & "\txt\导出邮箱" & Format(Now, "yyyymmdd-hhmm") & ".txt"
MailContent = Mid(MailContent, 2)
NewTextFile MailFilePath, MailContent With Sht
Set Rng = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
Set Rng = Rng.Resize(dNew.Count, 3)
Rng.Value = Application.Rept(dNew.Items, 1)
.Range("B:C").ClearContents
End With UsedTime = VBA.Timer - StartTime
Debug.Print "UsedTime :" & Format(UsedTime, "#0.0000 Seconds")
'MsgBox "UsedTime :" & Format(UsedTime, "#0.0000 Seconds") ErrorExit: Set dHas = Nothing
Set dNew = Nothing
Set Wb = Nothing
Set NewWb = Nothing
Set OpenWb = Nothing
Set Sht = Nothing
Set oSht = Nothing
Set OpenSht = Nothing
Set NewSht = Nothing AppSettings False
Exit Sub
ErrHandler:
If Err.Number <> 0 Then
MsgBox Err.Description & "!", vbCritical, "AuthorQQ 84857038"
Debug.Print Err.Description
Err.Clear
Resume ErrorExit
End If End Sub
Public Sub AppSettings(Optional IsStart As Boolean = True)
Application.ScreenUpdating = IIf(IsStart, False, True)
Application.DisplayAlerts = IIf(IsStart, False, True)
Application.Calculation = IIf(IsStart, xlCalculationManual, xlCalculationAutomatic)
Application.StatusBar = IIf(IsStart, ">>>>>>>>Macro Is Running>>>>>>>>", False)
End Sub Function FsoGetFiles(ByVal FolderPath As String, ByVal Pattern As String, Optional ComplementPattern As String = "") As String()
Dim Arr() As String
Dim FSO As Object
Dim ThisFolder As Object
Dim OneFile As Object
ReDim Arr(1 To 1)
Arr(1) = "None"
Dim Index As Long
Index = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrorExit
Set ThisFolder = FSO.getfolder(FolderPath)
If Err.Number <> 0 Then Exit Function
For Each OneFile In ThisFolder.Files
If OneFile.Name Like Pattern Then
If Len(ComplementPattern) > 0 Then
If Not OneFile.Name Like ComplementPattern Then
Index = Index + 1
ReDim Preserve Arr(1 To Index)
Arr(Index) = OneFile.Path
End If
Else
Index = Index + 1
ReDim Preserve Arr(1 To Index)
Arr(Index) = OneFile.Path
End If
End If
Next OneFile
ErrorExit:
FsoGetFiles = Arr
Erase Arr
Set FSO = Nothing
Set ThisFolder = Nothing
Set OneFile = Nothing
End Function
Public Function RegGet(ByVal OrgText As String, ByVal Pattern As String) As String
Dim Regex As Object
Dim Mh As Object
Set Regex = CreateObject("VBScript.RegExp")
With Regex
.Global = True
.Pattern = Pattern
End With
If Regex.test(OrgText) Then
Set Mh = Regex.Execute(OrgText)
RegGet = Mh.Item(0).submatches(0)
Else
RegGet = ""
End If
Set Regex = Nothing
End Function
Sub NewTextFile(ByVal FilePath As String, ByVal FileContent As String)
Open FilePath For Output As #1
Print #1, FileContent
Close #1
End Sub

  

20181011xlVba提取邮箱手机号码的更多相关文章

  1. python从Excel中提取邮箱

    从各个城市的律师协会去爬取的律师的招聘信息,可是邮箱在招聘简介里面,所有需要写个脚本去提取邮箱 import pandas as pd import re regex = r"([-_a-z ...

  2. 快速提取邮箱地址(利用word或网站)

    在word中,CTRL+F,输入:[A-z,0-9]{1,}\@[A-z,0-9,\.]{1,} 点击“高级”,勾选“使用通配符”,点击“查找全部”: 复制.粘贴. 还可通过以下页面在线提取. htt ...

  3. 小程序[邮箱提取器-EmailSplider]总结

    1.背景情况     学东西做快的是付诸实践,写这个小程序的目的就是为了综合运用各个知识点,从而提升学习的效果.   2.涉及知识     A.Swing 的布局     B.Swing中,线程访问U ...

  4. 提取包含QQ的文本为QQ邮箱

    # -*- coding: utf-8 -*- """ Created on Sun Dec 15 14:08:03 2019 @author: Dell 提取包含QQ号 ...

  5. 如何从OA系统批量整理出邮箱地址,并导入到Foxmail 地址薄中?

    一.打开某位leader的OA,点击查看“下属” a. 将所有的下属信息 --- 全选 --- 复制 --- 粘贴到 excel 表格中 b. 分别提取“姓名” 和 “邮箱”地址信息,结合notepa ...

  6. 2019-01-31 Python学习之BFS与DFS实现爬取邮箱

    今天学习了python网络爬虫的简单知识 首先是一个爬取百度的按行读取和一次性爬取 逐行爬取 for line in urllib.request.urlopen("http://www.b ...

  7. 常用的jquery

    获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item = $(&qu ...

  8. JQuery 常用命令总结

    下面介绍在jQuery中设置form表单中action的值的方法. $("#myFormId").attr("action", "userinfo.s ...

  9. MySQL 第八天(核心优化二)

    一.昨天内容回顾 存储引擎 保存数据的格式(技术),不同格式体现特性不一样 myisam ① 结构.数据.索引 文件单独存储 ② 存入数据顺序(不考虑主键顺序) ,写入数据速度快 ③ 并发性,低,锁整 ...

随机推荐

  1. 16 级高代 II 思考题九的七种解法

    16 级高代 II 思考题九  设 $V$ 是数域 $\mathbb{K}$ 上的 $n$ 维线性空间, $\varphi$ 是 $V$ 上的线性变换, $f(\lambda),m(\lambda)$ ...

  2. topcoder srm 540 div1

    problem1 link 设第一个数字为$x$,那么第2到第$n$个数字都可以表示成$a+bx$的形式,其中$b=1$或者$b=-1$.然后可以求出关于$x$的一些范围,求交集即可. problem ...

  3. uniGUI试用笔记(六)

    uniGUI提供了一个文件上传控件TUniFileUpload,进行数据的导入就变得比较容易.首先将TUniFileUpload控件放置在窗体上,按下导入按钮后,执行TUniFileUpload的文件 ...

  4. Flask学习【第5篇】:用Falsk实现的分页

    Flask实现的分页组件 from urllib.parse import urlencode,quote,unquote class Pagination(object): "" ...

  5. 彻底了解 suid, sgid ,sticky权限

    sticky: 粘性的, 如 : sticky tape: 粘胶带 /tmp, /var/tmp: 位 sticky: 表示: 第一, 任何用户都可以在该目录下创建文件(编辑自己的文件),第二, 但是 ...

  6. Web、OAuth2/SSO相关拾遗

    OAuth2认证相关:(SSO资源访问流程也应类似设计,它与OAuth2第三方认证.授权不同,是同一个应用系统间的认证.授权过程,且需要实现一个点授权,可访问所有点,一个点退出,收回所有点授权,且有时 ...

  7. 【Dalston】【第三章】声明式服务调用(Feign)

    当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻.那 ...

  8. (转载)Sublime Text 3 快捷键大全

    选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数名等 ...

  9. 案例:8,64,256都是2的阶次方数(8是2的3次方),用Java编写程序来判断一个整数是不是2的阶次方数。

     如果一个数是2的阶次方数,则它的二进制数的首位一般是1,后面全为0.比如8:1000,64:1000000,如果将这个数减1后再作与&运算,则应该全为0,(x&(x-1)==0&am ...

  10. python学习 day09打卡 初识函数

    本节内容: 1.什么是函数 2.函数定义,函数名,函数体及函数的调用 3.函数的返回值 4.函数的参数 一.什么是函数 函数:对代码块和功能的封装和定义 定义一个事情或者功能.等到需要的时候直接去用, ...