Notifications
Clear all

Formatar Número ao voltar da Userform para Planilha.

9 Posts
3 Usuários
0 Reactions
2,144 Visualizações
(@finaljustice)
Posts: 91
Trusted Member
Topic starter
 

Boa noite,

Criei uma Userform que contém 40 Textbox, esta busca informação em uma Sheet para exibir a informação na userform na formatação correta (com separador de milhar) e criei um IF para verificar se o valor é maior que 1, se for usar a formatação sem decimais se for menor que 1 use decimais. O meu problema está na volta, quando faço alteração na userform e vou colocar o valor de volta para a sheet, os valores estão voltando como texto e não números.

Private Sub UserForm_Activate()

For i = 1 To 40
UserForm2.Controls("Label" & i).Caption = ThisWorkbook.Sheets("LD").Range("Y4").Offset(i - 1, 0) & _
                                            " (" & ThisWorkbook.Sheets("LD").Range("AC4").Offset(i - 1, 0) & ")"
                                            
If ThisWorkbook.Sheets("LD").Range("AB4").Offset(i - 1, 0) > 1 Then
UserForm2.Controls("Textbox" & i) = FormatNumber(ThisWorkbook.Sheets("LD").Range("AB4").Offset(i - 1, 0), 0)
Else: UserForm2.Controls("Textbox" & i) = FormatNumber(ThisWorkbook.Sheets("LD").Range("AB4").Offset(i - 1, 0), 2)
End If
                                
Next
UserForm2.CommandButton1.Caption = "Editar Valores"

End Sub

Abaixo está o código do botão que está na userform para editar valores e retornar eles para sheet após alterações.

Sub EditMP() 'Editar valores da Userform2
If UserForm2.CommandButton1.Caption = "Editar Valores" Then 'unlock for editing.
For i = 1 To 40
UserForm2.Controls("Textbox" & i).Enabled = True
Next
UserForm2.CommandButton1.Caption = "Salvar Alterações"

ElseIf UserForm2.CommandButton1.Caption = "Salvar Alterações" Then 'put back info into sheets

For i = 1 To 40
ThisWorkbook.Sheets("LD").Range("AB4").Offset(i - 1, 0) = UserForm2.Controls("Textbox" & i) 'esta dando problema na volta, _
    os valores estão voltando como texto para a planilha.
UserForm2.Controls("Textbox" & i).Enabled = False
Next
UserForm2.CommandButton1.Caption = "Editar Valores"
End If

End Sub

Para tentar corrigir o problema, tentei então estipular a volta da informação para a sheet fosse em formato de número alterando o código para:

Sub EditMP() 'Editar valores da Userform2
If UserForm2.CommandButton1.Caption = "Editar Valores" Then 'unlock for editing.
For i = 1 To 40
UserForm2.Controls("Textbox" & i).Enabled = True
Next
UserForm2.CommandButton1.Caption = "Salvar Alterações"

ElseIf UserForm2.CommandButton1.Caption = "Salvar Alterações" Then 'put back info into sheets

For i = 1 To 40
ThisWorkbook.Sheets("LD").Range("AB4").Offset(i - 1, 0) = FormatNumber(UserForm2.Controls("Textbox" & i)) 'aqui que fiz a alteração!!!!
UserForm2.Controls("Textbox" & i).Enabled = False
Next
UserForm2.CommandButton1.Caption = "Editar Valores"
End If

End Sub

Porém ao retornar o valor para a sheet o número que era 3mil (3000) volta como 3.000 e ai a planilha não entende que isto é um número e sim um texto.

Basicamente estou querendo pegar valores da planilha, deixar números que não tem decimais e exibi-los com separador de milhares e os que tem decimais apresentar eles como tal e na volta certificar-se que o valor que irá retornar para a planilha é um número mesmo.

Alguém poderia me dar uma luz por gentileza?

Att,

Luis

 
Postado : 25/08/2015 2:19 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Eu creio não ter entendido muito bem, mas porque você não format a coluna da guia para o formato que deseja?

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/08/2015 6:08 am
(@finaljustice)
Posts: 91
Trusted Member
Topic starter
 

Bom dia!!

Eu creio não ter entendido muito bem, mas porque você não format a coluna da guia para o formato que deseja?

Att

Bom dia,

Vou tentar te exemplificar o que está ocorrendo.

Tenho valores que estão no Range AB4:AB43 (40 células), estes valores são dinheiro/ unidade e pode variar de números cheios "bonitinhos" e números decimais. Ao puxar estes valores para popular as textbox os valores que vem não tem separadores de milhar (algo que gostaria de ter na hora de sua exibição), para isso então coloquei o FormatNumber() na hora de popular as textboxes. Mesmo que eu não use o FormatNumber() na hora de voltar a informação para a planilha, ela está voltando como texto, portanto quando eu verifico a planilha fica com aquela notificação para converter o valor em número. As células estavam antes configuradas para números, meu problema está justamente na hora de colocar a informação de volta para a planilha, o não estou conseguindo fazer com que estes valores ao serem inseridos na planilha sejam compreendidos por ela como números e não textos.

Espero ter clarificado o que quis dizer.

Muito obrigado pela sua atenção.
Att,
Luis

 
Postado : 26/08/2015 7:03 am
(@finaljustice)
Posts: 91
Trusted Member
Topic starter
 

Ninguém saberia me ajudar a certificar que o valor que será retornado para a planilha é um número ao invés de texto?

Obrigado pela atenção.
Att
Luis

 
Postado : 27/08/2015 6:42 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sem visualizar o arquivo vamos no achometro

For i = 1 To 40
ThisWorkbook.Sheets("LD").Range("AB4").Offset(i - 1, 0) = Format(UserForm2.Controls("Textbox" & i),"#,##0.00) 'aqui que fiz a alteração!!!!
UserForm2.Controls("Textbox" & i).Enabled = False
Next

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/08/2015 8:00 am
(@finaljustice)
Posts: 91
Trusted Member
Topic starter
 

Sem visualizar o arquivo vamos no achometro

For i = 1 To 40
ThisWorkbook.Sheets("LD").Range("AB4").Offset(i - 1, 0) = Format(UserForm2.Controls("Textbox" & i),"#,##0.00) 'aqui que fiz a alteração!!!!
UserForm2.Controls("Textbox" & i).Enabled = False
Next

Boa tarde Reinaldo

Tentei fazer essa alteração que você sugeriu e não tive sucesso. Portanto estou enviando um exemplo do que estou tentando fazer para que possa analisar melhor. Acho estranho pois a volta da informação para a planilha sempre está sendo interpretada como texto, por mais que esteja "forçando" a formatação.

Muito obrigado pela atenção.

Att,
Luis

 
Postado : 27/08/2015 10:52 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja sje atende

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/08/2015 11:58 am
benzadeus
(@benzadeus)
Posts: 78
Trusted Member
 

Tente:

ThisWorkbook.Sheets("LD").Range("AB4").Offset(i - 1, 0) = Replace(UserForm2.Controls("Textbox" & i),".", Application.DecimalSeparator) * 1

Felipe Costa Gualberto
Microsoft Excel MVP
http://www.ambienteoffice.com.br

 
Postado : 27/08/2015 12:48 pm
(@finaljustice)
Posts: 91
Trusted Member
Topic starter
 

Veja sje atende

Muito obrigado pela resposta, você poderia por gentileza me esclarecer algumas dúvidas do que foi feito pois gostaria de entender como e porque a sua solução não gerou problemas enquanto a minha está gerando esse tipo de problema. Assim evito que ocorra novamente.

Por exemplo no código abaixo que você usou, essa variável "x" que você declarou Double. Porque fez isto? (Não sou muito bom também na utilização das variáveis corretas por isso estou perguntando)

x = Worksheets("LD").Range("AB4").Offset(i - 1, 0)
Controls("Textbox" & i) = Format(x, "Standard")

Pelo o que eu entendi também neste caso de cima eu poderia sem usar a variável auxiliar usar somente assim correto: (pelo menos deu certo ou parece que deu certo por enquanto)

Controls("Textbox" & i) = Format(Worksheets("LD").Range("AB4").Offset(i - 1, 0), "Standard")

Outra parte que não ficou claro o que você tentou fazer foi nesta parte:

tp = CDec(Controls("Textbox" & i))
            Worksheets("LD").Range("AB4").Offset(i - 1, 0) = tp * 1

O que "CDec()" faz?
Porque você multiplicou por 1 a variável tp?

De novo muito obrigado pelo tempo perdido para me auxiliar.

Att,
Luis

 
Postado : 27/08/2015 12:59 pm