结合VBA和公式检查唯一输出

结合VBA和公式检查唯一输出,vba,excel,formula,excel-formula,Vba,Excel,Formula,Excel Formula,好的,我有一个公式,它根据名字和姓氏列表生成用户名。现在,当这起作用时,我希望单元格引用我自己的VBA函数。但是,我仍然希望使用原始公式,因为代码要少得多 我有一个公式: =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LOWER(LEFT(table[[#This Row];[Firstname:]])&table[[#This Row];[Lastname:]]);"æ";"a");"ø";"o");"å";"a") 这基本上会生成用户名。但是,我想通过一个单独

好的,我有一个公式,它根据名字和姓氏列表生成用户名。现在,当这起作用时,我希望单元格引用我自己的VBA函数。但是,我仍然希望使用原始公式,因为代码要少得多

我有一个公式:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LOWER(LEFT(table[[#This Row];[Firstname:]])&table[[#This Row];[Lastname:]]);"æ";"a");"ø";"o");"å";"a")
这基本上会生成用户名。但是,我想通过一个单独的函数来运行它,以确定用户名是否已经被使用。如果是,它应该生成一个稍微不同的用户名

我是这样想的:

Public Function genUserName(ByVal strFirstName, strLastName As String)
    Dim strUsername As String

    Set objDomain = GetObject("WinNT://grunnarbeid2.local")
    objDomain.Filter = Array("User")

    'FormulaR1C1 = "=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LOWER(LEFT(tableFaste[[#This Row];[Fornavn:]])&tableFaste[[#This Row];[Etternavn:]]);""æ"";""a"");""ø"";""o"");""å"";""a"")"
    'strUsername = ActiveCell.FormulaR1C1


    blnFound = False

    For Each objUser In objDomain
        If objUser.Name = strUsername Then
            blnFound = True
        Exit For
        End If
    Next

    genUserName = strUsername

End Function

那么,我该如何组合这些功能呢?

我建议将
GenuerName
的功能限制为仅检查唯一性,并将现有公式的结果传递给它:

Public Function genUserName(ByVal strUsername As String)
    Set objDomain = GetObject("WinNT://grunnarbeid2.local")
    objDomain.Filter = Array("User")
    blnFound = False
    For Each objUser In objDomain
        If objUser.Name = strUsername Then
            blnFound = True
            Exit For
        End If
    Next
    genUserName = strUsername
End Function
然后从一个像

=genUserName(SUBSTITUTE( ... ))

这很好用,我会为你修好我的“逻辑”而称赞你。我只是想得不对:)