ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Word > 分享在WORD中查找手机、固话、邮址的自定义函数

分享在WORD中查找手机、固话、邮址的自定义函数

作者:绿色风 分类: 时间:2022-08-18 浏览:190
楼主
chenlifeng
通过反复测试,下面三个自定义函数,能把当前WORD中的手机、固话、邮箱地址,全部匹配出来,特作分享,谢谢!
  1. Function 调用固话() As String
  2.     Dim RegExp As Object, str, mMatch
  3.     str = ActiveDocument.range.text
  4.     Set RegExp = CreateObject("vbscript.regexp")   
  5.     With RegExp
  6.         .Global = True
  7.         .IgnoreCase = True
  8.         .Pattern = "((0[0-9]{2,3})?(\-|\_|[ ]{0,})?([2-9][0-9]{3})+([ ]{0,})?([0-9]{3,4})+((\-|_|转| {0,}|分机)[0-9]{1,4})?)" '"(0[0-9]{2,3})?(-|_|[ ]{0,})?([2-9][0-9]{3})+([ ]{0,})?([0-9]{3,4})+((\-|_|转| {0,}|分机)[0-9]{1,4})?"
  9.     End With   
  10.     If RegExp.test(str) Then
  11.         For Each mMatch In RegExp.Execute(str)
  12.             If Len(GetNum(mMatch.Value, 1)) = 7 Or Len(GetNum(mMatch.Value, 1)) = 8 Or Len(GetNum(mMatch.Value, 1)) = 11 Or Len(GetNum(mMatch.Value, 1)) = 12 Or Len(GetNum(mMatch.Value, 1)) = 13 Or Len(GetNum(mMatch.Value, 1)) = 14 Or Len(GetNum(mMatch.Value, 1)) = 15 Or Len(GetNum(mMatch.Value, 1)) = 16 Then
  13.                With Selection.Find
  14.                    .text = mMatch
  15.                    .Wrap = wdFindContinue
  16.                End With
  17.                Selection.Find.Execute            
  18.                Selection.MoveLeft Unit:=wdCharacter, Count:=1
  19.                Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
  20.                Dim 前范围, 后范围, Reg As Object
  21.                    前范围 = Selection
  22.                    Selection.MoveRight Unit:=wdCharacter, Count:=1
  23.                    Selection.MoveRight Unit:=wdCharacter, Count:=Len(mMatch)
  24.                    Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
  25.                    后范围 = Selection
  26.                Set Reg = CreateObject("vbscript.regexp")
  27.                With Reg
  28.                    .Global = True
  29.                    .IgnoreCase = False
  30.                    .MultiLine = True
  31.                    .Pattern = "固话|固|电话|座机|座|家庭|庭"
  32.                End With
  33.                If Reg.test(前范围 & 后范围) Then
  34.                   调用固话 = Replace(调用固话, " ", "") & ";" & mMatch.Value
  35.                Else
  36.                   If (Len(GetNum(mMatch.Value, 1)) = 16 Or Len(GetNum(mMatch.Value, 1)) = 15 Or Len(GetNum(mMatch.Value, 1)) = 12 Or Len(GetNum(mMatch.Value, 1)) = 11) And Mid(GetNum(mMatch.Value, 1), 1, 1) = 0 And InStr(前范围, "证") = 0 And InStr(前范围, "编") = 0 And InStr(后范围, "(证") = 0 And InStr(后范围, "(编") = 0 Then
  37.                       调用固话 = Replace(调用固话, " ", "") & ";" & mMatch.Value
  38.                   ElseIf (Len(GetNum(mMatch.Value, 1)) = 8 Or Len(GetNum(mMatch.Value, 1)) = 7) And Mid(GetNum(mMatch.Value, 1), 1, 1) > 1 And InStr(前范围, "证") = 0 And InStr(前范围, "编") = 0 And InStr(后范围, "(证") = 0 And InStr(后范围, "(编") = 0 Then
  39.                       调用固话 = Replace(调用固话, " ", "") & ";" & mMatch.Value
  40.                   End If
  41.                End If               
  42.             End If
  43.         Next mMatch
  44.     Else
  45.         调用固话 = "没有固定电话,或输错位数与空位置错"
  46.     End If
  47.     Selection.HomeKey Unit:=wdStory '把光标移动的文档首
  48.     If Mid(调用固话, 1, 1) = ";" Then
  49.        调用固话 = "固话:" & Mid(调用固话, 2, Len(调用固话) - 1)
  50.     Else: 调用固话 = IIf(调用固话 = "", "固话:可能不存在", "固话:" & 调用固话)
  51.     End If
  52. End Function


  53. Function 调用手机() As String
  54.     Dim RegExp As Object, str, mMatch
  55.     str = ActiveDocument.range.text
  56.     Set RegExp = CreateObject("vbscript.regexp")   
  57.     With RegExp
  58.         .Global = True
  59.         .IgnoreCase = True
  60.         .Pattern = "(((\+86)|(86))?([ ]{0,})?(13|14|15|18)+(\d{1})+([ ]{0,})?(\d{4})+([ ]{0,})?(\d{4})+|((\+86)|(86))?([ ]{0,})?(13|14|15|18)+(\d{2})+([ ]{0,})?(\d{4})+([ ]{0,})?(\d{3})+)"
  61.     End With   
  62.     If RegExp.test(str) Then
  63.         For Each mMatch In RegExp.Execute(str)
  64.             If Len(GetNum(mMatch.Value, 1)) = 11 Or Len(GetNum(mMatch.Value, 1)) = 13 Or Len(GetNum(mMatch.Value, 1)) = 14 Then
  65.                With Selection.Find
  66.                    .text = mMatch
  67.                    .Wrap = wdFindContinue
  68.                End With
  69.                Selection.Find.Execute            
  70.                Selection.MoveLeft Unit:=wdCharacter, Count:=1
  71.                Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
  72.                Dim 前范围, 后范围, Reg As Object
  73.                    前范围 = Selection
  74.                    Selection.MoveRight Unit:=wdCharacter, Count:=1
  75.                    Selection.MoveRight Unit:=wdCharacter, Count:=Len(mMatch)
  76.                    Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
  77.                    后范围 = Selection
  78.                Set Reg = CreateObject("vbscript.regexp")
  79.                With Reg
  80.                    .Global = True
  81.                    .IgnoreCase = False
  82.                    .MultiLine = True
  83.                    .Pattern = "手机|手|ell|hon|all|ber"
  84.                End With
  85.                If Reg.test(前范围 & 后范围) Then
  86.                   调用手机 = Replace(调用手机, " ", "") & ";" & mMatch.Value
  87.                Else
  88.                   If Len(GetNum(mMatch.Value, 1)) = 14 And Mid(GetNum(mMatch.Value, 1), 1, 3) = "+86" And InStr(前范围, "证") = 0 And InStr(前范围, "编") = 0 And InStr(后范围, "(证") = 0 And InStr(后范围, "(编") = 0 Then
  89.                       调用手机 = Replace(调用手机, " ", "") & ";" & mMatch.Value
  90.                   ElseIf Len(GetNum(mMatch.Value, 1)) = 13 And Mid(GetNum(mMatch.Value, 1), 1, 3) = "86" And InStr(前范围, "证") = 0 And InStr(前范围, "编") = 0 And InStr(后范围, "(证") = 0 And InStr(后范围, "(编") = 0 Then
  91.                       调用手机 = Replace(调用手机, " ", "") & ";" & mMatch.Value
  92.                   ElseIf Len(GetNum(mMatch.Value, 1)) = 11 And InStr(前范围, "证") = 0 And InStr(前范围, "编") = 0 And InStr(后范围, "(证") = 0 And InStr(后范围, "(编") = 0 Then
  93.                       调用手机 = Replace(调用手机, " ", "") & ";" & mMatch.Value
  94.                   End If
  95.                End If               
  96.             End If
  97.         Next mMatch
  98.     Else
  99.         调用手机 = "没有手机号码,或输错号码与位数"
  100.     End If
  101.     Selection.HomeKey Unit:=wdStory '把光标移动的文档首
  102.     If Mid(调用手机, 1, 1) = ";" Then
  103.        调用手机 = "手机:" & Mid(调用手机, 2, Len(调用手机) - 1)
  104.     Else: 调用手机 = IIf(调用手机 = "", "手机:可能不存在", "固话:" & 调用手机)
  105.     End If
  106. End Function



  107. Function 调用邮箱() As String
  108.     Dim RegExp As Object, str, mMatch
  109.     str = ActiveDocument.range.text
  110.     Set RegExp = CreateObject("vbscript.regexp")   
  111.     With RegExp
  112.         .Global = True
  113.         .IgnoreCase = True
  114.         .Pattern = "(([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))"
  115.     End With   
  116.     If RegExp.test(str) Then
  117.         For Each mMatch In RegExp.Execute(str)            
  118.                With Selection.Find
  119.                    .text = mMatch
  120.                    .Wrap = wdFindContinue
  121.                End With
  122.                Selection.Find.Execute            
  123.                Selection.MoveLeft Unit:=wdCharacter, Count:=1
  124.                Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
  125.                Dim 前范围, 后范围, Reg As Object
  126.                    前范围 = Selection
  127.                    Selection.MoveRight Unit:=wdCharacter, Count:=1
  128.                    Selection.MoveRight Unit:=wdCharacter, Count:=Len(mMatch)
  129.                    Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
  130.                    后范围 = Selection
  131.                Set Reg = CreateObject("vbscript.regexp")
  132.                With Reg
  133.                    .Global = True
  134.                    .IgnoreCase = False
  135.                    .MultiLine = True
  136.                    .Pattern = "邮箱|电子|邮件|mail|邮|地址|址"
  137.                End With
  138.                If Reg.test(前范围 & 后范围) Then
  139.                   调用邮箱 = 调用邮箱 & ";" & mMatch.Value
  140.                Else
  141.                   If InStr(前范围, "网络") = 0 And InStr(前范围, "网页") = 0 And InStr(后范围, "(网络") = 0 And InStr(后范围, "(网页") = 0 Then 调用邮箱 = 调用邮箱 & ";" & mMatch.Value
  142.                End If
  143.         Next mMatch
  144.     Else
  145.         调用邮箱 = "没有电子邮箱,或漏输入了“@”"
  146.     End If
  147.     Selection.HomeKey Unit:=wdStory '把光标移动的文档首
  148.     If Mid(调用邮箱, 1, 1) = ";" Then
  149.        调用邮箱 = "邮箱:" & Mid(调用邮箱, 2, Len(调用邮箱) - 1)
  150.     Else: 调用邮箱 = IIf(调用邮箱 = "", "邮箱:可能不存在", "邮箱:" & 调用邮箱)
  151.     End If
  152. End Function
2楼
herelazy
真是太棒啦,非常实用,感谢楼主分享啊!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap