Usuário com melhor resposta
Abrir formulario no excel VBA com os dados do ultimo preenchimento

Pergunta
-
Ola pessoal
É o seguinte pessoal, tentei resolver aqui mas não consegui.
Tenho um formulario para inserir dados em umas planilhas. esta funcionando bem.
Mas o problema é o seguinte: Gostaria que toda vez que eu abrir a planilha e ao inicializar o formulario os dados do ultimo preenchimento estivessem no formulario ainda. esses dados ficam em combobox e textbox. Deu pra entender galera?
não quero que ao fechar o formulario os dados contidos neles se apagem. como faço isso?
Obs: Nesse formulario tem 9 multipage. Naõ sei se esse detalhe é importante.
desde já agradeço
Abraço a todos
Respostas
-
Num formulário, crie duas caixas de texto: uma chamada TextBox1 e outra TextBox2 e cole o código abaixo:
Const PROGRAM_NAME As String = "Controle de Estoque" Private Sub UserForm_Initialize() 'Carrega dados do Regedit ao formulário TextBox1 = GetSetting(PROGRAM_NAME, Me.Name, TextBox1.Name) TextBox2 = GetSetting(PROGRAM_NAME, Me.Name, TextBox2.Name) End Sub Private Sub UserForm_Terminate() 'Salva dados do formulário no Regedit SaveSetting PROGRAM_NAME, Me.Name, TextBox1.Name, TextBox1.Text SaveSetting PROGRAM_NAME, Me.Name, TextBox2.Name, TextBox2.Text End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Sugerido como Resposta 'Natan Silva sábado, 26 de setembro de 2015 10:53
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 5 de novembro de 2015 14:29
-
Esses dados correspondem a última linha preenchida na sua planilha de dados ?
Se sim, é só resgatar esses dados e preenche-los no evento initialize do formulário.
O exemplo abaixo faz isso, considerando que os dados estão na Plan1, começando na célula a1. Observe que são preenchidos os dados nas textbox de 1 a 4, com os valores das colunas da aba Plan1.
Private Sub UserForm_Initialize() Dim intLastRow As Integer Sheets("Plan1").Select intLastRow = Sheets("Plan1").Range("A1").End(xlDown).Row UserForm1.TextBox1.Value = Sheets("Plan1").Cells(intLastRow, 1).Value UserForm1.TextBox2.Value = Sheets("Plan1").Cells(intLastRow, 2).Value UserForm1.TextBox3.Value = Sheets("Plan1").Cells(intLastRow, 3).Value UserForm1.TextBox4.Value = Sheets("Plan1").Cells(intLastRow, 4).Value End Sub
- Sugerido como Resposta André Santo terça-feira, 22 de setembro de 2015 13:56
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 5 de novembro de 2015 14:29
-
quando se usa multpage realmente fica dificil se ter os nomes dos objetos
eu uso uma lista com os nomes e concateno os valores com virgula e salvo tudo em uma unica celula
Sub DeslocaGrava_Click() Ref = Array("revC", "freC", "incrC", "revL", "freL", "incrL", "Lo") For r = 0 To Ubound(Ref) revCA = "" For cs = 1 To 13 ObRef = Ref(r) & cs revCA = revCA & Me.Controls(ObRef) If cs < 13 Then revCA = revCA & "," Next Cells(41 + r, 6).Value2 = revCA Next End Sub
e para le os valores
Sub DeslocaLe_Click() Ref = Array("revC", "freC", "incrC", "revL", "freL", "incrL", "Lo") For r = 0 To Ubound(Ref) Dr = Cells(41 + r, 6).Value2 revCA = Split(Dr, ",") For cs = 1 To 13 ObRef = Ref(r) & cs Dr = revCA(cs - 1) If Dr = "Verdadeiro" Then Dr = True: If Dr = "Falso" Then Dr = False: Me.Controls(ObRef) = Dr Next Next End Sub
como pode ver eu tenho muitos objetos em sequencia
esses são os nomes dos objetos que são passados para um array
Ref = Array("revC", "freC", "incrC", "revL", "freL", "incrL", "Lo")
como eu tenho 13 de cada um se faz um loop em todos
For cs = 1 To 13
e se junta os valores de todos com virgula e no final se salva em uma celula
tenho outro userform com mais objetos e usei celulas como slots para salvar e le os valores
outro exemplo
Sub RealocarGrava_Click() Dim Dr As String, D As String Ref = Array("Fixacopy", "Plan_list", "De_1", "OZig_C", "Oinvq_C", "Oinvert_L", _ "Oquadante_L", "OQuatL", "Oinvq_L", "Oinvert_C", "OZig_L", "Oquadante_C", "OQuatC", "OdpL", "Odpc", _ "Para_2", "Quant", "Dquadante_L", "Dinvq_L", _ "Dquadante_C", "DQuatL", "Ddpc", "DdpL", "Dinvert_L", "DZig_L", "Dinvert_C", "DZig_C", _ "DQuatC", "Dinvq_C", "Alinhar_Baixo", "Latrea", "SetTud") Dr = "" For r = 0 To UBound(Ref) D = Me.Controls(Ref(r)).Value If D = "Verdadeiro" Then D = "V#" If D = "Falso" Then D = "F#" Dr = Dr & D If r < UBound(Ref) Then Dr = Dr & "," Next Cells(49, Me.Grava_Le.Value + 2).Value2 = Dr End Sub
Eu substitui Verdadeiro e Falso por V# e F# para não ocupar muito espaço
o resultado na celula fica mais ou menos assim
F#,Fixa(7),pagamentos,V#,V#,V#,V#,26,V#,F#,V#,F#,,F#,V#,tributos,128,V#,V#,F#,300,F#,V#,F#,V#,F#,F#,,F#,V#,V#,V#
- Editado Edcronos sábado, 26 de setembro de 2015 22:39
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 5 de novembro de 2015 14:29
Todas as Respostas
-
Esses dados correspondem a última linha preenchida na sua planilha de dados ?
Se sim, é só resgatar esses dados e preenche-los no evento initialize do formulário.
O exemplo abaixo faz isso, considerando que os dados estão na Plan1, começando na célula a1. Observe que são preenchidos os dados nas textbox de 1 a 4, com os valores das colunas da aba Plan1.
Private Sub UserForm_Initialize() Dim intLastRow As Integer Sheets("Plan1").Select intLastRow = Sheets("Plan1").Range("A1").End(xlDown).Row UserForm1.TextBox1.Value = Sheets("Plan1").Cells(intLastRow, 1).Value UserForm1.TextBox2.Value = Sheets("Plan1").Cells(intLastRow, 2).Value UserForm1.TextBox3.Value = Sheets("Plan1").Cells(intLastRow, 3).Value UserForm1.TextBox4.Value = Sheets("Plan1").Cells(intLastRow, 4).Value End Sub
- Sugerido como Resposta André Santo terça-feira, 22 de setembro de 2015 13:56
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 5 de novembro de 2015 14:29
-
-
Henrique,
Sugiro utilizar as instruções GetSetting e SaveSetting do VBA. Elas obtém e salvam registros no Regedit da máquina local, respectivamente.
Você pode tambémf azer como o André sugeriu, armazenando os valores numa planilha oculta de configuração ou até mesmo num nome definido.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Ola Andre
Somente hoje pude ver as respostas.
Esqueci de um detalhe. No meu form tem 1 multipage com 9 page e os dados desse form são de varias planilhas.
como ficaria então conforme suas dicas?
Aproveito tambem para tirar outra duvida: nesse formuçario que ja existe quero criar um botão para abrir outro formularaio que contem alguns botões de opção, onde o botão selecionado sera inserido em uma planilha.
Como programar o botaõ para abrir esse segundo form?
-
-
Num formulário, crie duas caixas de texto: uma chamada TextBox1 e outra TextBox2 e cole o código abaixo:
Const PROGRAM_NAME As String = "Controle de Estoque" Private Sub UserForm_Initialize() 'Carrega dados do Regedit ao formulário TextBox1 = GetSetting(PROGRAM_NAME, Me.Name, TextBox1.Name) TextBox2 = GetSetting(PROGRAM_NAME, Me.Name, TextBox2.Name) End Sub Private Sub UserForm_Terminate() 'Salva dados do formulário no Regedit SaveSetting PROGRAM_NAME, Me.Name, TextBox1.Name, TextBox1.Text SaveSetting PROGRAM_NAME, Me.Name, TextBox2.Name, TextBox2.Text End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Sugerido como Resposta 'Natan Silva sábado, 26 de setembro de 2015 10:53
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 5 de novembro de 2015 14:29
-
quando se usa multpage realmente fica dificil se ter os nomes dos objetos
eu uso uma lista com os nomes e concateno os valores com virgula e salvo tudo em uma unica celula
Sub DeslocaGrava_Click() Ref = Array("revC", "freC", "incrC", "revL", "freL", "incrL", "Lo") For r = 0 To Ubound(Ref) revCA = "" For cs = 1 To 13 ObRef = Ref(r) & cs revCA = revCA & Me.Controls(ObRef) If cs < 13 Then revCA = revCA & "," Next Cells(41 + r, 6).Value2 = revCA Next End Sub
e para le os valores
Sub DeslocaLe_Click() Ref = Array("revC", "freC", "incrC", "revL", "freL", "incrL", "Lo") For r = 0 To Ubound(Ref) Dr = Cells(41 + r, 6).Value2 revCA = Split(Dr, ",") For cs = 1 To 13 ObRef = Ref(r) & cs Dr = revCA(cs - 1) If Dr = "Verdadeiro" Then Dr = True: If Dr = "Falso" Then Dr = False: Me.Controls(ObRef) = Dr Next Next End Sub
como pode ver eu tenho muitos objetos em sequencia
esses são os nomes dos objetos que são passados para um array
Ref = Array("revC", "freC", "incrC", "revL", "freL", "incrL", "Lo")
como eu tenho 13 de cada um se faz um loop em todos
For cs = 1 To 13
e se junta os valores de todos com virgula e no final se salva em uma celula
tenho outro userform com mais objetos e usei celulas como slots para salvar e le os valores
outro exemplo
Sub RealocarGrava_Click() Dim Dr As String, D As String Ref = Array("Fixacopy", "Plan_list", "De_1", "OZig_C", "Oinvq_C", "Oinvert_L", _ "Oquadante_L", "OQuatL", "Oinvq_L", "Oinvert_C", "OZig_L", "Oquadante_C", "OQuatC", "OdpL", "Odpc", _ "Para_2", "Quant", "Dquadante_L", "Dinvq_L", _ "Dquadante_C", "DQuatL", "Ddpc", "DdpL", "Dinvert_L", "DZig_L", "Dinvert_C", "DZig_C", _ "DQuatC", "Dinvq_C", "Alinhar_Baixo", "Latrea", "SetTud") Dr = "" For r = 0 To UBound(Ref) D = Me.Controls(Ref(r)).Value If D = "Verdadeiro" Then D = "V#" If D = "Falso" Then D = "F#" Dr = Dr & D If r < UBound(Ref) Then Dr = Dr & "," Next Cells(49, Me.Grava_Le.Value + 2).Value2 = Dr End Sub
Eu substitui Verdadeiro e Falso por V# e F# para não ocupar muito espaço
o resultado na celula fica mais ou menos assim
F#,Fixa(7),pagamentos,V#,V#,V#,V#,26,V#,F#,V#,F#,,F#,V#,tributos,128,V#,V#,F#,300,F#,V#,F#,V#,F#,F#,,F#,V#,V#,V#
- Editado Edcronos sábado, 26 de setembro de 2015 22:39
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 5 de novembro de 2015 14:29