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

时间:2011-11-14 07:49:01

标签: vba excel-vba formula excel-formula excel

好的,我有这个公式,它根据名字和姓氏列表生成用户名。现在,虽然这有效,但我希望单元格引用我自己的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

那么,我该如何结合这些呢?

1 个答案:

答案 0 :(得分:2)

我建议将genUserName的功能限制为只检查唯一性,并将现有表格的结果传递给它:

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( ... ))