Notifications
Clear all

VBA - DEIXAR A PRIMEIRA LETRA MAIÚSCULA ( COM EXCEÇÕES ).

9 Posts
4 Usuários
0 Reactions
1,893 Visualizações
(@rodrigosil)
Posts: 0
New Member
Topic starter
 

Boa Noite Amigos!!!

Eu tenho este código que converte as primeiras letras em Maiúsculas e o restante em minúsculas.

Porém, durante a conversão as células que contém fórmulas são afetadas e ele substitui todas as células que tinham fórmulas em números.

Eu gostaria de colocar uma condição neste mesmo código, onde ele não mexa nas células que contém fórmulas ( Tem que passar por estas células sem alterá-las ).

Segue o código:

Sub Primeira_Maiúscula()
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, " A ", " a ")
C.Value = WorksheetFunction.Substitute(C.Value, " Na ", " na ")
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 ")
C.Value = WorksheetFunction.Substitute(C.Value, " Com ", " com ")
C.Value = WorksheetFunction.Substitute(C.Value, " Ou ", " ou ")
Else
C.Value = UCase(C.Value)
End If
Next C
End Sub

Me deem um luz pessoal!!

 
Postado : 09/02/2016 7:45 pm
(@mprudencio)
Posts: 0
New Member
 

Pode ser exagero meu mas a função pri.maiuscula nao resolve?

 
Postado : 09/02/2016 8:05 pm
(@rodrigosil)
Posts: 0
New Member
Topic starter
 

Boa Noite Marcelo!!

Mas, como você encaixaria essa sintaxe no código para evitar que não afete as células que contém fórmulas.

Estou aprendendo VBA, sou leigo ainda.

 
Postado : 09/02/2016 8:42 pm
(@rodrigosil)
Posts: 0
New Member
Topic starter
 

Alguém pode me ajudar?

Eu gostaria de colocar uma condição neste mesmo código, onde ele não mexa nas células que contém fórmulas ( Tem que passar por estas células sem alterá-las ).

Já tentei aqui colocar uma condição e sempre dá erro.

O código converte tudo certinho, mas estraga as células que possuem Fórmulas!

Estou começando agora com VBA, qualquer coisinha que se mexe no código dá erro...KKK

 
Postado : 10/02/2016 6:09 am
(@mprudencio)
Posts: 0
New Member
 

A ideia e usar fórmula não o VIA. Vc aplica a fórmula onde necessitar.

 
Postado : 10/02/2016 7:53 am
(@mprudencio)
Posts: 0
New Member
 

A ideia e usar fórmula não o VIA. Vc aplica a fórmula onde necessitar.

 
Postado : 10/02/2016 7:56 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Olá, Rodrigo.

Veja se ajuda. Acrescente as duas linhas sugeridas abaixo.

...
...
For Each C In Selection
If Not C.HasFormula Then 'acrescente esta linha
...
...
...
End If
End If 'acrescente esta linha
...
...
 
Postado : 10/02/2016 8:30 am
(@rodrigosil)
Posts: 0
New Member
Topic starter
 

Boa Tarde Marcelo Prudêncio e Osvaldo!!!!!

Obrigado amigos, agora deu certo show de bola!!!!!!

Osvaldo, acrescentei as duas linhas e não deu erro nenhum.

Marcelo, o que eu queria era realmente o VBA pois eu tenho um balancete de verificação e não seleciono apenas a coluna onde estão o nome das contas eu seleciono todo o conteúdo e executo a macro.

Mas, quando eu executava a macro ela também passava pelas células que continham fórmulas e desmontava as fórmulas entende.

Vou deixar aqui o código caso mais alguém precise, quebra um galhão!!!!

VBA – Primeira letra Maiúscula, e as demais minúsculas ( Com exceções e sem mexer em células com fórmulas ).

Sub Primeira_Maiúscula()
Dim C As Range
For Each C In Selection
If Not C.HasFormula Then
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, " A ", " a ")
C.Value = WorksheetFunction.Substitute(C.Value, " Na ", " na ")
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 ")
C.Value = WorksheetFunction.Substitute(C.Value, " Com ", " com ")
C.Value = WorksheetFunction.Substitute(C.Value, " Ou ", " ou ")
Else
C.Value = UCase(C.Value)
End If
End If
Next C
End Sub

VBA – Todas Maiúsculas ( Sem mexer em células com fórmulas ).

Sub Maiúscula()
For Each x In Selection
If Left(x.Formula, 1) <> "=" Then x.Value = UCase(x.Value)
Next
End Sub

VBA – Todas Minúsculas ( Sem mexer em células com fórmulas ).

Sub Minúscula()
For Each x In Selection
If Left(x.Formula, 1) <> "=" Then x.Value = LCase(x.Value)
Next
End Sub

Até mais pessoal!

 
Postado : 10/02/2016 11:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

rodrigo

Se a resposta do Osvaldomp foi útil, faltou clicar na mãozinha para agradecer.

Como você é novo no fórum, para facilitar a tua participação, sugiro tomar conhecimento do conteúdo dos links abaixo:

viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

[]s

Patropi - Moderador

 
Postado : 10/02/2016 3:02 pm