Olá, Amigos.
Preciso de uma ajuda, estava com um duvida para saber como se abreviava nomes do meio numa célula no Excel, achei um excelente Código de autoria de Adilson Soledade moderador da comunidade, porém gostaria de saber se teria como o código VBA fornecer as abreviações mas sem os pontos, nome completo (José Anchieta Santos Neves) o código fornece assim(José A. S. Neves), gostaria sem os pontos(José A S Neves). Desde já agradeço pela ajuda.
Function ABREVIARNOMES(Célula As Range, ParamArray NomesSemAbreviar()) As String Dim PrimeiroNome As String, Texto As String, _ ÚltimoNome As String, Abrev As String Dim i As Integer, k As Integer, Opcional As Integer, Controle As Integer Dim Nome, Nomes, NomeSemAbreviar, PosiçãoInicial Application.Volatile 'Se só houver uma palavra, somente ela é retornada Texto = Célula If InStr(1, Texto, " ") = 0 Then ABREVIARNOMES = Texto Exit Function End If 'Retornar todas a palavras do nome para uma matriz Nomes = Split(Texto, " ") 'Retornar o primeiro nome PrimeiroNome = Left(Texto, InStr(1, Texto, " ") - 1) 'Retornar o último nome ÚltimoNome = Right(Texto, Len(Texto) - InStrRev(Texto, " ", -1)) 'Se não for informado o argumento opcional, é atribuída uma cadeia vazia If IsMissing(NomesSemAbreviar) Then Opcional = 1 End If 'Loop para percorrer os nomes do texto informado For Each Nome In Nomes Select Case Len(Nome) 'Não abreviar conectores como "e" Case 1 Abrev = Abrev & Nome & Space(1) 'Não abreviar conectores como "de" ou "das" Case 2, 3 If Left(Nome, 1) = "d" Then Abrev = Abrev & Nome & Space(1) Case Else 'Execução para o caso em que não há argumentos opcionais If Opcional = 1 Then Abrev = Abrev & UCase(Left(Nome, 1)) & "." & Space(1) Else 'Quando há argumentos opcionais testa o nome contra cada um deles For Each NomeSemAbreviar In NomesSemAbreviar If Nome = NomeSemAbreviar Then Controle = 1 Exit For Else Controle = 0 End If Next NomeSemAbreviar If Controle = 1 Then 'Se for encontrada coincidência com os argumentos opcionais, não realiza abreviatura Abrev = Abrev & Nome & Space(1) Else 'Se não for encontrada coincidência com os argumentos opcionais, realiza abreviatura Abrev = Abrev & UCase(Left(Nome, 1)) & "." & Space(1) End If End If End Select Next Nome 'Criar o nome final definitivo, com abreviaturas e demais considerações Abrev = PrimeiroNome & Right(Abrev, Len(Abrev) - InStr(1, Abrev, ".")) ABREVIARNOMES = Left(Abrev, Len(Abrev) - 3) & ÚltimoNome End Function
Matheusdsr,
Boa noite!
Antes de qualquer coisa, pedimos, por gentileza, ao postar código VBA no fórum, utilizar a ferramenta CODE existente logo acima da caixa de mensagens (quinto botão da esquerda para a direita).
Quanto a sua demanda, veja se é assim.
Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)
Atenciosamente
Wagner Morel