Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas Com Formatação


epottag

Pergunta

Bom dia pessoal!

Estou com um probleminha aqui...

Ao fazer algumas operações com minha planilha, alguns números acabam "entrando" com fortado de texto, mesmo a célula estando formatada como contábil.

Sem pensar em uma solução muito complexa, pensei na solução dada pelo Excel: incluo um número 1, com formato contábil, num loca escondido da planilha, copio-o e colo com formato especial para as colunas em que desejo transformar a formatação. Ao executar esse processo via excel, sem programação, tudo vai bem. Entretanto, ao colocar em VBA, isso não funciona!

O código que montei é o seguinte, bem simples:

Range("Q1").Select

ActiveCell.FormulaR1C1 = "1"

Range("Q1").Select

Selection.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"

Selection.Copy

Range("E2").Select

Range(Selection, Selection.End(xlDown)).Select

Range("E2:F700").Select

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _

SkipBlanks:=False, Transpose:=False

Columns("E:E").EntireColumn.AutoFit

Columns("F:F").EntireColumn.AutoFit

Application.CutCopyMode = False

Seleciono a célula, ponho o número, formato-o, colo o formato no destino e ajusto o tamanho das células. Mas o formato não está modificando, diferentemente do que ocorre quando eu faço direto, manualmente!

Alguém tem alguma sugestão do que eu possa fazer?

Desde já agradeço e um abração a todos

Erich Pottag

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Penso em duas soluções, embora não consiga desenvolver a macro ainda:

- Primeira opção: Identificar células em que, embora formatadas como CONTÁBEIS, tenham os números inseridos como texto, para em seguida formatá-las como contábeis;

- Segunda opção: referenciar alguma célula, como padrão de formatação, como fiz no meu post anterior. Mas a macro, por hora, não funcionou...

Ou ainda modificar a entrada de dados. Esses valores que são inseridos com formato texto são provenientes de um processo de alteração na planilha. Explico. Estes dados já estão na planilha, com formato pré determinado em seu lançamento. Entretanto, quando "chamamos" determinada linha para efetuar alteração, quando o valor é digitado com uma vírgula (por exemplo, 366,67) ele é lançado como um texto, embora a célula esteja formatada como contábil. Abaixo segue o código que fizemos, talvez alguma alteração neste resolva o problema:

- As ranges estão todas definidas e referem-se a uma planilha de Abril/2006;

Private Sub CmdAlterar_Click()

'Altera os dados do movimento

Dim ValorCr As String, Faz As String, ValorDb As String, Hist As String, Data As Date

ValorCr = Me.TxtValorCr.Value

ValorDb = Me.TxtValorDb.Value

Data = Me.TxtData.Value

Hist = Me.TxtHist.Value

Faz = Me.TxtFaz.Value

Range("ValorCrAbr06").Item(linha) = ValorCr

Range("ValorDbAbr06").Item(linha) = ValorDb

Range("DataAbr06").Item(linha) = Data

Range("LancAbr06").Item(linha) = Hist

Range("FazAbr06").Item(linha) = Faz

'Abre a planilha

ActiveWorkbook.Unprotect "secreto"

Sheets("JABAbr06").Visible = True

Sheets("JABAbr06").Select

'Classifica dados por ordem de data

Range("A2:G700").Sort key1:=Range("A2"), order1:=xlAscending, header:=xlGuess

'Fecha a planilha ativa e protege a pasta de trabalho

ActiveSheet.Visible = False

ActiveWorkbook.Protect "secreto"

'Redefine o formulário

Me.LstAltAbr06.ListIndex = -1

Me.TxtValorCr.Text = Empty

Me.TxtValorDb.Text = Empty

Me.TxtData.Text = Empty

Me.TxtHist.Text = Empty

Me.TxtFaz.Text = Empty

Me.LblLançamento.Enabled = False

Me.LblValorCr.Enabled = False

Me.LblValorDb.Enabled = False

Me.LblData.Enabled = False

Me.LblHist.Enabled = False

Me.LblFaz.Enabled = False

Me.CmdAlterar.Enabled = True

Me.CmdFechar.Enabled = True

End Sub

Private Sub LstAltAbr06_Click()

'Define Linha como a posição do movimento selecionada

linha = Me.LstAltAbr06.ListIndex + 1

'Habilita os controles desabilitados

Me.CmdAlterar.Enabled = True

Me.CmdFechar.Enabled = True

Me.TxtValorCr.Enabled = True

Me.TxtValorDb.Enabled = True

Me.TxtData.Enabled = True

Me.TxtHist.Enabled = True

Me.TxtFaz.Enabled = True

'Mostra na caixa de texto o valor do movimento selecionado

Me.TxtValorCr = Range("ValorCrAbr06").Item(linha)

Me.TxtValorDb = Range("ValorDbAbr06").Item(linha)

Me.TxtData = Range("DataAbr06").Item(linha)

Me.TxtHist = Range("LancAbr06").Item(linha)

Me.TxtFaz = Range("FazAbr06").Item(linha)

End Sub

Tudo isso está referenciado a um formulário de alteração!

Bom é isso! Obrigado e um abraço a todos!

Erich

Link para o comentário
Compartilhar em outros sites

  • 0

Ouvi dizer que existe uma propriedade, uma função, no VBA que equivaleria dizer: "pegue este conteúdo que é um texto e transforme-o em número".

Algo como um Text to number...

Alguém conhece?

Isso resolveria o meu problema super rápido, porque eu poderia inserir esse código no meio da alteração, que coloquei no post acima!

Se alguém puder me ajudar!

Obrigado, um abraço e bom fim de semana a todos!

Erich

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal...

Parece incrível, mas quando eu coloquei a função em prática, na planilha definitiva, não funcionou.

Mas, num arquivo teste, igual, funcionou! Ele dá um erro 13, Tipos Incompatíveis. Será que estou fazendo alguma besteira?

Olha o código como ficou:

Private Sub CmdAlterar_Click()

'Altera os dados do movimento

Dim ValorCr As String, Faz As String, ValorDb As String, Hist As String, Data As Date

ValorCr = Me.TxtValorCr.Value

ValorDb = Me.TxtValorDb.Value

Data = Me.TxtData.Value

Hist = Me.TxtHist.Value

Faz = Me.TxtFaz.Value

Range("ValorCrAbr06").Item(linha) = CDbl(ValorCr)

Range("ValorDbAbr06").Item(linha) = CDbl(ValorDb)

Range("DataAbr06").Item(linha) = Data

Range("LancAbr06").Item(linha) = Hist

Range("FazAbr06").Item(linha) = Faz

'Abre a planilha

ActiveWorkbook.Unprotect "secreto"

Sheets("JABAbr06").Visible = True

Sheets("JABAbr06").Select

'Classifica dados por ordem de data

Range("A2:G700").Sort key1:=Range("A2"), order1:=xlAscending, header:=xlGuess

'Fecha a planilha ativa e protege a pasta de trabalho

ActiveSheet.Visible = False

ActiveWorkbook.Protect "secreto"

'Redefine o formulário

Me.LstAltAbr06.ListIndex = -1

Me.TxtValorCr.Text = Empty

Me.TxtValorDb.Text = Empty

Me.TxtData.Text = Empty

Me.TxtHist.Text = Empty

Me.TxtFaz.Text = Empty

Me.LblLançamento.Enabled = False

Me.LblValorCr.Enabled = False

Me.LblValorDb.Enabled = False

Me.LblData.Enabled = False

Me.LblHist.Enabled = False

Me.LblFaz.Enabled = False

Me.CmdAlterar.Enabled = True

Me.CmdFechar.Enabled = True

End Sub

Eu inseri o CDbl () após a definição das Ranges.

O que estou fazendo de errado??

Obrigado e um abraço!

Erich

Link para o comentário
Compartilhar em outros sites

  • 0

qual a linha do erro?

o que deve estar acontecendo é que vem um campo com letra. tipo se você quiser converter "10a" para double.

pra não dar erro, é so você usar Val() no lugar de CDbl(), mas acho que o mais certo era você fazer uma validacao.

Link para o comentário
Compartilhar em outros sites

  • 0

O erro acontece exatamente na linha do CDbl, onde inseri...

Range("ValorCrAbr06").Item(linha) = CDbl(ValorCr)

Range("ValorDbAbr06").Item(linha) = CDbl(ValorDb)

Ele joga o erro direto aí, quando faço a depuração...

Como assim validação??

Desculpe, mas eu sou novato em VB!!

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Provavelmente porque você está enviando para CDbl() algum "valor" que ela não consegue converter. Se você fizer...

? cdbl("a")
... realmente vai dar erro. Agora...
? cdbl("1,5")

... funciona perfeitamente. Verifique se você não está de repente passando em uma célula cujo "valor" não é numérico (passar uma string vazia [""] também dá erro).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

aí pessoal, consegui resolver o problema aqui!

Obrigado a todos que tentaram dar uma mão!

Valeu Kuroi e Graymalkin, que encontraram a solução!

Caso alguém tenha um problema semelhante, o Graymalkin sugeriu inserir o seguinte comando no meio da programação, o qual converte em número, valores inseridos como texto!

Dim célula As Range

For Each célula In Range("E2:F700")

célula.FormulaR1C1Local = célula.Value

Next célula

É isso aí!!

Abraço a todos

Link para o comentário
Compartilhar em outros sites

  • 0

Olá....

Estou com o mesmo problema. Alguns dados que são gerados pelo SAP entram como numero em formato de texto.

O engraçado é que se eu abrir a pasta tal, automaticamente, eles já são convertidos para numero.

Contudo, uso uma outra pasta que importa tais dados. Para fazer isso criei a seuginte macro (trecho de tal ação).

Workbooks.Open ("Z:\Intranet\controlling\restrito2\INSERT.XLS")

Windows("INSERT.XLS").Activate

'Ajeitando a tabela de dados

Rows("1:13").Select

Selection.Delete Shift:=xlUp

Range("A:A,F:F").Select

Selection.Delete Shift:=xlToLeft

'Substituindo valores para data

Columns("D:D").Select

Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=False

' Convertendo numeros em texto em números

Range("BQ3").Select

ActiveCell.FormulaR1C1 = "1"

Range("BQ3").Select

Selection.Copy

Range("M1:BO1").Select

Range("BO1").Activate

Range(Selection, Selection.End(xlDown)).Select

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _

SkipBlanks:=False, Transpose:=False

Range("BQ4").Select

Application.CutCopyMode = False

Range("BQ3").Select

Selection.ClearContents

'Copiando tabela

Range("A1:BN1").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy

'Colando dados da tabela INSERT na KE

Windows("KE30_200809.xls").Activate

Range("A2").Select

ActiveSheet.Paste

Range("H2").Select

Application.CutCopyMode = False

' Workbooks("INSERT.XLS").Close SaveChanges:=False

...........

Se eu abrir a pasta INSERT.XLS, ocorre tudo perfeitamente; nem precisaria ter incluido esse código. Mas como pode ver, nessa macro, ela é que abre e fecha o arquivo; e desse modo não funciona; ao abrir, pela macro, a conversão não ocorre automaticamente. Então vem o trecho do código para fazer.

No trecho em vermelho seria o trecho do código responsável por esse colar especial, o que indica o 'Ajuda' como modo de resolver o problema.

Fazendo manualmente, perfeito. Aliás, ao fazer a macro deu certo. Contudo, ao se usar a macro dá errado!

O código simplesmente não funciona.

É como se a linha de código em vermelho fosse pulada!!!

O colar em especial não ocorre. Verifiquei isso.

Creio que seja alguma linha de comando do tipo "Executar essa cola especial"; que a Macro não gravou. Que provavelmente, seria o que acontece quando, manualmente, no "Colar especial" clicamos no OK, ou se dá um ENTER.

Assim, como a Macro não grava se usarmos o AutoCorreção.

Isso é pelo menos o que ocorre na versão XP - Office 2003. Creio que no 2007 já tenham resolvido isso.

Mas a questão continua? Como eu faço isso?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...