2011-11-14 47 views
2

好吧,我有這個公式可以根據名字和姓氏列表生成用戶名。現在,雖然這有效,但我希望單元格引用我自己的VBA函數。但是,由於代碼少得多,我仍然想使用原始公式。結合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 

那麼,我該如何組合這些?

回答

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

這工作得很好,我會給你修理我的「邏輯」的榮譽。我只是想了想我錯了:) –