2011-11-14 1 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의 기능을 제한 제안하고, 그것으로 기존 formual의을 결과를 전달할 것 : 다음

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

같은 셀에서 호출 이것은 잘 작동하며, "논리"를 고치기 위해 명성을 줄 것입니다. 나는 그것에 대해 내가 생각하는 잘못된 길을 생각했다 :) –