Pessoalmente, eu criaria uma função definida pelo usuário para isso, assim você não precisa de um sub para gerar uma função de planilha
Para isso, basta digitar G6 =username(C6,D6,G6)
. O benefício adicional é a maior legibilidade do código para manutenção e a leitura imediata dos seus valores na macro, sem precisar referenciar nenhuma célula.
Public Function UserName(ByVal firstName As String, ByVal lastName As String, ByVal middleInitial As String) As String
Dim result As String
If Len(firstName) + Len(lastName) >= 8 Then
result = firstName & lastName
Else: result = firstName & middleInitial & lastName
End If
If Len(result) > 8 Then result = Left(result, 8)
UserName = result
End Function
Isso também pode ser reutilizado facilmente para outras funções semelhantes, porque é fácil de ler.
Você pode usar o mesmo tipo de código se quiser mantê-lo como um sub apenas Dim
ing as variáveis e defini-las para suas respectivas células.
Uma observação importante sobre a lógica dessa função - em sua tentativa, você não considera a possibilidade de que uma primeira + média + última seja menor que 8, então não sei o que você gostaria de fazer com essa . Talvez o seu máximo seja 8, então não importa se é 5 - mas se isso acontecer, adicione alguma lógica ao adicionar caracteres. Além disso, se isso estiver gerando nomes de usuário, você provavelmente desejará verificá-lo em relação a nomes de usuários existentes e ajustar para duplicatas.