Kenny Bones
Kenny Bones

Reputation: 5129

Combining VBA and formulas to check for unique output

Ok, I've got this formula which generates usernames based on a list of first and last names. Now, while this works, I want the cells to refer to my own VBA function instead. But, I still want to use the original formula because of much less code.

I've got this formula:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LOWER(LEFT(table[[#This Row];[Firstname:]])&table[[#This Row];[Lastname:]]);"æ";"a");"ø";"o");"å";"a")

This basically generates the username. But, I want to run this through a separate function, to find out if the username is already taken. And if it is, it should generate a slightly different user name.

I was thinking something along these lines:

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

So, how do I combine these?

Upvotes: 2

Views: 321

Answers (1)

chris neilsen
chris neilsen

Reputation: 53126

I would suggest limiting the functionality of genUserName to just checking uniqueness, and pass the result of your existing formual into it:

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

then call it from a cell like

=genUserName(SUBSTITUTE( ... ))

Upvotes: 2

Related Questions