搜索格式不一致的名称

时间:2016-06-02 13:28:38

标签: excel vba excel-vba

我建立了一个子服务器,用于迭代当天的一张商业交易,并为我们的客户提供地址和附加PDF收据。有些客户在同一家公司工作,但被视为不同的实体,因此每个客户都会收到自己的电子邮件收据。来自这个特定公司的人只能通过他们的电子邮件句柄识别为团队,这就是我如何匹配哪些收据去哪个电子邮件处理哪些个人。

问题: 我遇到的问题是,在联系人主列表中(保存所有联系信息),名称被列为名字和姓氏(IE John Snow),并且在其中一个外部系统中,信息是从列出名称作为姓氏然后名字(雪约翰),我的当前代码找不到。我知道我可以使用InStr,但对我来说有点草率,这些收据中包含的信息非常机密。我不顾一切地以一种整洁有力的方式找到一个一致的方法找到这个名字。

我想到的可能的解决方案是拆分名称并将它们存储到一个数组中,然后比较不同的索引位置,但这似乎效率低下。有什么想法吗?

当前代码不足 注意:这只是主程序中的一个小功能

Private Function IsEmpSameFirm(empName As String, firmEmail As String, firmName As String) As Boolean
    'Finds separate employee email and compares to current email to find if same distribution
    Dim empFinder As Range, firmFinder As Range
    Dim columnCounter As Long

    columnCounter = 1

    While firmFinder Is Nothing

        Set firmFinder = contactsMaster.Columns(columnCounter).Find(firmName)

        columnCounter = columnCounter + 1
    Wend

    Set empFinder = contactsMaster.Rows(firmFinder.Row).Find(empName)

    If empFinder Is Nothing Then

        IsEmpSameFirm = False

    ElseIf empFinder.Offset(0, 1).Value = firmEmail Then

        IsEmpSameFirm = True

    Else

        IsEmpSameFirm = False

    End If


End Function

1 个答案:

答案 0 :(得分:0)

简答: 不可能
中间回答:这意味着一个推理:
- 你回忆起你的记忆,回想起两个gaven“Strings”中的哪一个是一个名字,哪一个是姓。如果你希望PC也这样做,你需要“教”它 - 写一个包含你知道的每个姓氏的数据库,如果它在那里找到,那么它就是一个姓氏 -
长答案:
我要做的是将文本分成列,为每个文本做一个过滤,然后“手动”分析它们,这个函数可以帮助你分割字符串

 Function RetriveText(InString As String, ChrToDivide, Position As Long)
 On Error GoTo Err01RetriveText 
 RetriveText = Trim(Split(InString, ChrToDivide)(Position - 1)) 
 If 1 = 2 Then '99 If error 
Err01RetriveText: RetriveText = "Position " & Position & " is not found in the  text " & InString 
 End If '99 If error 
 End Function

IE:
A1 =约翰史密斯 B1 = RetriveText(A1,“”,1)'结果:约翰
C1 = RetriveText(A1,“”,2)'结果:史密斯
编辑:刚刚意识到您正在尝试通过电子邮件发送,他们是否在Outlook中联系?如果是这样,为什么不在那里检查?试试这个功能

Public Function ResolveDisplayName(sFromName) As Boolean
'----------------------------------------------------------------------------------
' Procedure : ResolveDisplayNameToSMTP
' Author    : Sue Mosher - updated by D.Bartrup-Cook to work in Excel late binding.
'-----------------------------------------------------------------------------------
    Dim olApp As Object 'Outlook.Application
    Dim oRecip As Object 'Outlook.Recipient
    Dim oEU As Object 'Outlook.ExchangeUser
    Dim oEDL As Object 'Outlook.ExchangeDistributionList
    Set olApp = CreateObject("Outlook.Application")
    Set oRecip = olApp.Session.CreateRecipient(sFromName)
    oRecip.Resolve
    If oRecip.Resolved Then
        ResolveDisplayName = True
    Else
        ResolveDisplayName = False
    End If
End Function