Garantir formatação...
 
Notifications
Clear all

Garantir formatação de dados da userform para a planilha.

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

Estou com dificuldade de garantir a formatação da informação quando a pego na userform para jogar ela para a sheet, ao ser colocada na planilha, os dados ficam como texto . Preciso garantir que o dado quando colocado na sheet seja texto (que está funcionando) e número para os dados. Declarei a variável array como variant pois ela precisa receber 1 texto (nome do aço) e diversos números, mas não tenho certeza se essa era a melhor declaração de variável.

Eu já havia feito essa formatação porém puxando os dados da sheet para a userform e tentei usar essa mesma lógica na volta, porém não deu certo.
Este código abaixo exemplifica a formatação dos dados da sheet populando a userform que deu certo:

UserForm1.TextBox1 = Format(ThisWorkbook.Sheets("LD").Range("W28"), "Standard")

Aqui é o código puxando os dados da userform para a sheet porém a formatação não está funcionando.

Option Base 1
Public steelVar(35) As Variant
Public UltL As Long


Sub SaveSteel() 'salva o aço que irá ser cadastrado.
Application.ScreenUpdating = False
'pegar informações da userform para um array.
steelVar(1) = UserForm3.TextBox59.Value 'este é o nome do aço sendo cadastrado
For i = 2 To 35
steelVar(i) = UserForm3.Controls("Textbox" & i + 22) ' esses são os dados que serão colocados de volta na sheet e precisa garantir que será entendido como número.
Next

'Achar a ultima linha ocupada
UltL = ThisWorkbook.Worksheets("Acos").Range("A" & Rows.Count).End(xlUp).Row + 1
'colocar as informações devolta no sheet
For i = 1 To 35
    If i = 1 Then
        ThisWorkbook.Sheets("Acos").Range("A" & UltL).Offset(0, i - 1) = steelVar(i) 'colocar o nome do aço no sheet
    GoTo SkipName
    End If
ThisWorkbook.Sheets("Acos").Range("A" & UltL).Offset(0, i - 1) = Format(steelVar(i), "Standard") 'colocar dados
SkipName:
Next
'refresh do combobox como novo aço
UltL = ThisWorkbook.Worksheets("Acos").Range("A" & Rows.Count).End(xlUp).Row - 2
ThisWorkbook.Sheets("Acos").Range("A3:A" & UltL).Name = "list_steel"
UserForm1.ComboBox1.RowSource = "list_steel"

MsgBox "Sucesso!"
UserForm3.Hide

Application.ScreenUpdating = True
End Sub

Alguém consegue me ajudar por gentileza?

Obrigado pelo seu tempo e atenção.
Att,
Luis

 
Postado : 16/09/2015 8:02 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Particularmente, pelo post não vejo necessidade/vantagem de utilização do array; poderia "gravar" diretamente na planinha.
A maneira que utiliza o Format, nem sempre funciona no VBA (creio ser mais efetiva no VB), prefira Format(seuvalor,"0.00") ou Format(seuvalor,"#.00")....
assim deverá ter os valores reconhecidos. Também pode experimentar :
ThisWorkbook.Sheets("Acos").Range("A" & UltL).Offset(0, i - 1) = SeuValor * 1 (o valor a ser salvo multiplicado por 1)

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

 
Postado : 17/09/2015 6:15 am
(@finaljustice)
Posts: 91
Trusted Member
Topic starter
 

Particularmente, pelo post não vejo necessidade/vantagem de utilização do array; poderia "gravar" diretamente na planinha.
A maneira que utiliza o Format, nem sempre funciona no VBA (creio ser mais efetiva no VB), prefira Format(seuvalor,"0.00") ou Format(seuvalor,"#.00")....
assim deverá ter os valores reconhecidos. Também pode experimentar :
ThisWorkbook.Sheets("Acos").Range("A" & UltL).Offset(0, i - 1) = SeuValor * 1 (o valor a ser salvo multiplicado por 1)

Boa tarde Reinaldo,

Desculpe a demora para responder, é que não estou recebendo e-mails com notificação de resposta (e sim está marcado como "Notificar-me quando for respondida").
Obrigado por responder.

Continuo com problemas em que não consigo colocar as informações com valores na planilha. Modifiquei o código para adequar as suas sugestões e mesmo assim não obtive sucesso.

Aqui um exemplo:

Sub SaveSteel_2() 'saves the steeel that is about to be registered
Application.ScreenUpdating = False

'find last row occupied.
UltL = ThisWorkbook.Worksheets("Acos").Range("A" & Rows.Count).End(xlUp).Row + 1

For i = 1 To 36

If i = 1 Then

    ThisWorkbook.Sheets("Acos").Range("A" & UltL).Offset(0, i - 1) = UserForm3.Controls("Textbox" & i) 'adicionei esse IF pois o primeiro item é texto e achei que talvez fosse isso que estivesse atrapalhando e fazendo com que tudo fosse compreendido como texto.
    GoTo SkipName2
    End If
    ThisWorkbook.Sheets("Acos").Range("A" & UltL).Offset(0, i - 1) = Format(UserForm3.Controls("Textbox" & i), "0.00")
SkipName2:
Next

'refresh the combobox with the new steel.
UltL = ThisWorkbook.Worksheets("Acos").Range("A" & Rows.Count).End(xlUp).Row
ThisWorkbook.Sheets("Acos").Range("A3:A" & UltL).Name = "lista_acos"
UserForm1.ComboBox1.RowSource = "lista_acos"


MsgBox "Cadastro do aço com sucesso!"
UserForm3.Hide


Application.ScreenUpdating = True
End Sub

Tentei sem sucesso também: (porém esse caso está dando erro)

Sub SaveSteel_2() 'saves the steeel that is about to be registered
Application.ScreenUpdating = False

'find last row occupied.
UltL = ThisWorkbook.Worksheets("Acos").Range("A" & Rows.Count).End(xlUp).Row + 1

For i = 1 To 36

If i = 1 Then

    ThisWorkbook.Sheets("Acos").Range("A" & UltL).Offset(0, i - 1) = UserForm3.Controls("Textbox" & i)
    GoTo SkipName2
    End If
    ThisWorkbook.Sheets("Acos").Range("A" & UltL).Offset(0, i - 1) = (UserForm3.Controls("Textbox" & i))*1 'a multiplicação 
SkipName2:
Next

'refresh the combobox with the new steel.
UltL = ThisWorkbook.Worksheets("Acos").Range("A" & Rows.Count).End(xlUp).Row
ThisWorkbook.Sheets("Acos").Range("A3:A" & UltL).Name = "lista_acos"
UserForm1.ComboBox1.RowSource = "lista_acos"


MsgBox "Cadastro do aço com sucesso!"
UserForm3.Hide


Application.ScreenUpdating = True
End Sub

Alguma outra sugestão? Obrigado pela atenção.
Att,
Luis

 
Postado : 22/09/2015 1:08 pm