Página 1 de 1

VBA - Deixar a primeira letra Maiúscula ( Com Exceções ).

Enviado: 08 Fev 2016 às 16:07
por RodrigoSilvaLima
Boa Tarde Amigos!!!

Pessoal, eu estou tentando aprender VBA criei este código para deixar todas as primeiras letras em Maiúsculo e o restante em minúsculo além de não mexer nas células que possuem fórmulas.

Testei, e está funcionando bem porém existem alguns casos que eu gostaria de condicionar.

Exemplo:

1-Roberto De Andrade ( É o que o código faz ).

2-Roberto de Andrade ( Eu gostaria que o "de" ficasse em minúsculo ).


Gostaria que o código pulasse e deixasse estas terminações em minúsculo: " do ", " dos ", " da ", " das ", " de ", " e ", " a ", " ao ", " em ", " para ".

Segue o código:

Sub Proper_Case()
For Each x In Selection
If Left(x.Formula, 1) <> "=" Then x.Value = Application.Proper(x.Value)
Next
End Sub

Por favor, me ajudem amigos!

Até mais!!

VBA - Deixar a primeira letra Maiúscula ( Com Exceções ).

Enviado: 08 Fev 2016 às 17:32
por Reinaldo
Não fica claro o que é o seu x.formula; acredito que seja uma celula.
Veja se auxilia
Código: Selecionar todos
Function sMaiusculo(Texto) As String
Dim mArray() As String
Dim sTexto As String, iBegin As Integer, iFim As Integer, sResulta As String
iBegin = 1
Texto = LCase(Texto) & " "
mArray = Split("do dos da das de e a ao em para")
Do Until InStr(iBegin, Texto, " ") = 0
   iFim = InStr(iBegin, Texto, " ")
   sTexto = Mid(Texto, iBegin, iFim - iBegin)
   iBegin = iFim + 1
   If UBound(Filter(mArray, sTexto)) = -1 Then
      sTexto = UCase(Left(sTexto, 1)) & LCase(Mid(sTexto, 2))
   End If
   sResulta = sResulta & " " & sTexto
Loop

sMaiusculo = Trim(sResulta)

End Function
Sub Proper_Case()
For Each x In Selection
If Left(x.Formula, 1) <> "=" Then x.Value = sMaiusculo(x.Value)
Next
End Sub
Adaptação livre do postado em : http://www.vbweb.com.br/dicas_visual.asp?Codigo=3335 ; http://ensinandoexcel.com.br/e-excel/vb ... uscula.asp

Re: VBA - Deixar a primeira letra Maiúscula ( Com Exceções )

Enviado: 08 Fev 2016 às 20:41
por RodrigoSilvaLima
Boa Noite Reinaldo!!!

Testei aqui, mas está dando o seguinte problema:

Exemplo

Depreciação de Máquinas

O código está trazendo assim:

depreciação de Máquinas ( Ele deveria trazer Depreciação de Máquinas )

Nas outras exceções, também está fazendo a mesma coisa.

Tentei arrumar aqui, mas estou aprendendo ainda é como colocar um macaco pilotando um helicóptero vou mexer em algo e acabo estragando o código!KKK

Re: VBA - Deixar a primeira letra Maiúscula ( Com Exceções )

Enviado: 09 Fev 2016 às 00:24
por RodrigoSilvaLima
Reinaldo e amigos, estou tentando mexer nesta!

Testei, e ela converte as primeiras letras em Maiúsculas e o restante em minúsculas inclusive com as exceções!!!

Porém, quando eu executo ela mexe também nas células que possuem fórmulas as transformando em números.

Agora, o problema é colocar uma condição para o código trabalhar apenas nas células que contém textos e preservar as células que contém fórmulas.

Segue o código:

Sub Ajustar()
Dim C As Range

For Each C In Selection
C.Value = LCase(C.Value)
If UCase(C.Value) = C.Value Then

C.Value = LCase(C.Value)

ElseIf LCase(C.Value) = C.Value Then

C.Value = WorksheetFunction.Proper(C.Value)
'para o caso de nomes próprios, é necessário o tratamento abaixo:
C.Value = WorksheetFunction.Substitute(C.Value, " Do ", " do ")
C.Value = WorksheetFunction.Substitute(C.Value, " Dos ", " dos ")
C.Value = WorksheetFunction.Substitute(C.Value, " Da ", " da ")
C.Value = WorksheetFunction.Substitute(C.Value, " Das ", " das ")
C.Value = WorksheetFunction.Substitute(C.Value, " De ", " de ")
C.Value = WorksheetFunction.Substitute(C.Value, " E ", " e ")
C.Value = WorksheetFunction.Substitute(C.Value, " Ao ", " ao ")
C.Value = WorksheetFunction.Substitute(C.Value, " Em ", " em ")
C.Value = WorksheetFunction.Substitute(C.Value, " Para "," para ")
Else
C.Value = UCase(C.Value)
End If
Next C
End Sub

VBA - Deixar a primeira letra Maiúscula ( Com Exceções ).

Enviado: 09 Fev 2016 às 08:28
por Reinaldo
Bom não sei como aplicou o que propus, mas nos testes que efetuei, executou conforme se espera

VBA - Deixar a primeira letra Maiúscula ( Com Exceções ).

Enviado: 09 Fev 2016 às 11:07
por aapcabanas
Vc pode utilizar essa macro e adptar conforme sua necessiade

Function PRI_MAIUSCULO(Texto)

Dim Vpalavra, inicio, termino, Wresultado
inicio = 1
Texto = LCase(Texto) & " "

Do Until InStr(inicio, Texto, " ") = 0
termino = InStr(inicio, Texto, " ")
Vpalavra = Mid(Texto, inicio, termino - inicio)
inicio = termino + 1

If Vpalavra <> "de" And Vpalavra <> "da" And Vpalavra <> "do" And _
Vpalavra <> "das" And Vpalavra <> "dos" And Vpalavra <> "a" And _
Vpalavra <> "e" And Vpalavra <> "as" And Vpalavra <> "os" Then
Vpalavra = UCase(Left(Vpalavra, 1)) & LCase(Mid(Vpalavra, 2))
End If
Wresultado = Wresultado & " " & Vpalavra
Loop

PRI_MAIUSCULO = Trim(Wresultado)

End Function

espero que ajude....

Re: VBA - Deixar a primeira letra Maiúscula ( Com Exceções )

Enviado: 09 Fev 2016 às 11:37
por RodrigoSilvaLima
Bom dia aapcabanas!!!

Amigo, quando jogo o código no módulo e depois saio e tento executar não aparece nenhum código para executar.

Será que tem que colocar Sub () antes de Function PRI_MAIUSCULO(Texto) e no final do código End Sub??

Me desculpe a minha ignorância mas estou tentando aprender, fico mais perdido que chiclete em boca de banguelo.

Reinaldo, testei aqui e está dando o mesmo problema coloque uma célula ai DEPRECIAÇÃO DE MÁQUINAS.

Quando executar o código ele vai trazer: depreciação de Máquinas ( Ou seja, a primeira letra era para ficar Maiúscula a exceção está certa que é ficar "de" em minúsculo mesmo ).

E obrigado por estarem me ajudando, não é para qualquer um entender estes códigos.

Re: VBA - Deixar a primeira letra Maiúscula ( Com Exceções )

Enviado: 09 Fev 2016 às 11:52
por Kledison
Boa tarde,

verifica se o exemplo ajuda, utilizei o código que o Reinaldo postou.

Re: VBA - Deixar a primeira letra Maiúscula ( Com Exceções )

Enviado: 09 Fev 2016 às 12:36
por RodrigoSilvaLima
Kledison Lana, aapcabanas e Reinaldo obrigado amigos!!!

Agora funcionou tudo!!!!

O código do Reinaldo está funcionando, copiei o código novamente e agora deu certo!!

aapcabanas, creio que o seu também esteja funcionando mas como não entendo bem ainda de VBA não consegui adaptar ele.

VBA facilita muito o nosso trabalho vou me aprofundar nisso!


Obrigado amigos!!

Re: VBA - Deixar a primeira letra Maiúscula ( Com Exceções )

Enviado: 09 Fev 2016 às 16:59
por RodrigoSilvaLima
Pessoal, agora testando com mais detalhes está acontecendo outro erro:

Exemplo:

(-)DEPRECIAÇÃO DE MÁQUINAS

O código está trazendo (-)depreciação de Máquinas.

Se não colocar o (-) na frente ele traz correto Depreciação de Máquinas, e a minha planilha tem muitas contas com o (-) na frente.

Esse (-) tem que ficar na frente mesmo para efeito de entendimento, mas quando executo traz (-)depreciação de Máquinas.

Tinha que ficar (-)Depreciação de Máquinas.

Testando na planilha que o Kledison postou vocês poderão confirmar.

Alguém sabe como resolver?

VBA - Deixar a primeira letra Maiúscula ( Com Exceções ).

Enviado: 09 Fev 2016 às 17:55
por kiko
RodrigoSilva boa noite, coloque um espaço entre ) e as palavras existentes que dará certo, por exemplo assim (-) Depreciação de Máquinas.
Espero que ajude