Notifications
Clear all

VBA PARA LIMPAR FORMULÁRIO

3 Posts
2 Usuários
0 Reactions
1,389 Visualizações
(@terra89)
Posts: 2
New Member
Topic starter
 

Pessoal,

Possuo um formulário, com Validação de Dados (ComboBox) e uma função PROC. E inseri os dados em uma planilha, contudo ao clicar em "Lançar" busco limpar os campos TextBox para o usuário lançar novamente, só que está dando um erro.

- Funcionou em outras planilhas, mas as outras não possuiu a função PROC, por isso penso ser a origem dos problemas.
- Segue o código abaixo e um imagem do formulário.
- O registro (lançamento) foi feito corretamente.
- Quanto tiro o código de limpar os campos textbox o formulário funcioca.

Private Sub Form_EstoqueEnt_TxtBox1_Change()

Form_EstoqueEnt_TxtBox2 = Application.WorksheetFunction.Lookup(Form_EstoqueEnt_TxtBox1.Value, Worksheets("PRODUTO_DB").Range("C2:C1048576"), Worksheets("PRODUTO_DB").Range("A2:A1048576"))
Form_EstoqueEnt_TxtBox3 = Application.WorksheetFunction.Lookup(Form_EstoqueEnt_TxtBox1.Value, Worksheets("PRODUTO_DB").Range("C2:C1048576"), Worksheets("PRODUTO_DB").Range("D2:D1048576"))
Form_EstoqueEnt_TxtBox4 = Application.WorksheetFunction.Lookup(Form_EstoqueEnt_TxtBox1.Value, Worksheets("PRODUTO_DB").Range("C2:C1048576"), Worksheets("PRODUTO_DB").Range("G2:G1048576"))

End Sub


Private Sub Form_ForCad_Button_Click()
    Dim iRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("ESTOQUE_DB")
    
    'find first empty row in database
    iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
        SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
    
    'check for a part number
    If Trim(Me.Form_EstoqueEnt_TxtBox1.Value) = "" Then
      Me.Form_EstoqueEnt_TxtBox1.SetFocus
      MsgBox "Ops! Acho que você esqueceu o Nome do Produto."
      Exit Sub
    End If
      
    If Trim(Me.Form_EstoqueEnt_TxtBox5.Value) = "" Then
      Me.Form_EstoqueEnt_TxtBox5.SetFocus
      MsgBox "Ops! Acho que você esqueceu a Quantidade."
      Exit Sub
    End If
    
    If Trim(Me.Form_EstoqueEnt_TxtBox6.Value) = "" Then
      Me.Form_EstoqueEnt_TxtBox6.SetFocus
      MsgBox "Ops! Acho que você esqueceu o Tipo: Entrada/Saída."
      Exit Sub
    End If
    
    'copy the data to the database
    'use protect and unprotect lines,
    '     with your password
    '     if worksheet is protected
    With ws
    '  .Unprotect Password:="password"
      .Cells(iRow, 1).Value = Me.Form_EstoqueEnt_TxtBox1.Value
      .Cells(iRow, 2).Value = Me.Form_EstoqueEnt_TxtBox2.Value
      .Cells(iRow, 3).Value = Me.Form_EstoqueEnt_TxtBox3.Value
      .Cells(iRow, 4).Value = Me.Form_EstoqueEnt_TxtBox4.Value
      .Cells(iRow, 5).Value = Me.Form_EstoqueEnt_TxtBox5.Value
      .Cells(iRow, 6).Value = Me.Form_EstoqueEnt_TxtBox6.Value
    '  .Protect Password:="password"
    End With
    
    'clear the data
    Me.Form_EstoqueEnt_TxtBox1.Value = ""
    Me.Form_EstoqueEnt_TxtBox2.Value = ""
    Me.Form_EstoqueEnt_TxtBox3.Value = ""
    Me.Form_EstoqueEnt_TxtBox4.Value = ""
    Me.Form_EstoqueEnt_TxtBox5.Value = ""
    Me.Form_EstoqueEnt_TxtBox6.Value = ""
    Me.Form_EstoqueEnt_TxtBox1.SetFocus


End Sub

Private Sub UserForm_Initialize()

    'Validação Lista Produtos
    For Each blah In [ListaProdutos]
        Me.Form_EstoqueEnt_TxtBox1.AddItem blah
    Next blah
    
    'Tipo Entrada/Saída
    With Form_EstoqueEnt_TxtBox6
        .AddItem "Entrada"
        .AddItem "Saída"
    End With

End Sub

Desde já agradeço!

=D

 
Postado : 25/11/2015 11:19 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

só pelas rotinas o que dá para entender é que o erro citado é devido a estar utilizando o Evento CHANGE "Form_EstoqueEnt_TxtBox1_Change(), e na rotina em "Form_ForCad_Button_Click" nas linhas finais você está limpado o controle "Form_EstoqueEnt_TxtBox1" definindo como vazio, e devido ao evento, ao alterar este controle a rotina se iniciará e teremos erro pois o valor do controle está vazio.
O ideal seria reanalisar seu modelo e/ou trocar o evento ou utilzar um outro botão para a pesquisa e preencher os controles.
[]s

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

 
Postado : 25/11/2015 11:41 am
(@terra89)
Posts: 2
New Member
Topic starter
 

CONSEGUI RESOLVER, VAMOS LÁ.

Antes de mais nada eu renomeei os textbox:

Form_EstoqueEnt_TxtBox2 para Form_EstoqueCad_TxtBox2, ok?

Adicionei isto ao código:

Private Sub Form_EstoqueCad_TxtBox1_Change()
On Error Resume Next
    Form_EstoqueCad_TxtBox2 = Application.WorksheetFunction.Lookup(Form_EstoqueCad_TxtBox1.Value, Worksheets("PRODUTO_DB").Range("C2:C1048576"), Worksheets("PRODUTO_DB").Range("A2:A1048576"))
    Form_EstoqueCad_TxtBox3 = Application.WorksheetFunction.Lookup(Form_EstoqueCad_TxtBox1.Value, Worksheets("PRODUTO_DB").Range("C2:C1048576"), Worksheets("PRODUTO_DB").Range("D2:D1048576"))
    Form_EstoqueCad_TxtBox4 = Application.WorksheetFunction.Lookup(Form_EstoqueCad_TxtBox1.Value, Worksheets("PRODUTO_DB").Range("C2:C1048576"), Worksheets("PRODUTO_DB").Range("G2:G1048576"))

If Err.Number <> 0 Then
    Form_EstoqueCad_TxtBox2 = ""
    Form_EstoqueCad_TxtBox3 = ""
    Form_EstoqueCad_TxtBox4 = ""
End If

End Sub
 
Postado : 25/11/2015 11:41 am