Página 1 de 1

Aceitar somente dados já cadastrados

Enviado: Sáb Jul 25, 2020 7:41 pm
por Bruno_Henrique
Olá, amigos.

Tenho um problema que gostaria que me ajudassem. Eu estou fazendo um controle de estoque usando o vba. O meu problema é que construí dois forms. O primeiro, form1, seria o cadastro dos produtos como entrada e o outro, form2, eu separei para anexa esse produto a um segmento. Ou seja, quando eu for acessar o form2 e digitar um produto o aplicativo procure na tabela (plan1) onde foi cadastrado anteriormente pelo form1 (o form1 e o cadastro do produto está funcionando) e aceite somente estes dados cadastrados e salve em outra planilha (plan2). tentei usar o While, mas não consegui dar fim, mas acho que esse seria o caminho.

Re: Aceitar somente dados já cadastrados

Enviado: Dom Jul 26, 2020 11:49 am
por Wagner Morel
Anexe seu arquivo aqui no fórum e explique melhor o que quer. Você quer que o form2 apenas exiba os dados que já estão na Plan1 (salvos pelo form1)? É isso? Vai acrescentar mais alguns dados nesse form2 e após isso desejar salvar os dados na Plan2?

Re: Aceitar somente dados já cadastrados

Enviado: Ter Ago 04, 2020 10:31 pm
por Bruno_Henrique
Gostaria que ao digitar um código de um produto no form2, o vba só aceitasse aquele código que já foi cadastrado no Form1.

Tenho duas planilhas:
Tabela Entrada: pelo form1 eu cadastros os código do produto do fornecedor

Tabela Cadastro: seria a etapa 2. Np Form2, em um TextBox ao digitar um código o sistema tem que pesquisar na tabela entrada, se este código existe. Se existir deixar salvar na tabela Cadastro, caso contrario não deixar salvar

Re: Aceitar somente dados já cadastrados

Enviado: Ter Ago 04, 2020 10:39 pm
por Bruno_Henrique
Esse seria meu Form de Cadastro:
Private Sub btnSalvar_Click()

If txtCod.Text = "" Or CbModelo.Text = "" Or CbFuncionario.Text = "" Or CbFuncionario.Text = "" Then
MsgBox "Todos os campos devem ser preenchidos!", vbCritical, "ERRO"
Exit Sub
End If

Planilha1.Activate
Planilha1.Range("B5").Select

Dim ver As Double
ver = WorksheetFunction.CountIf(Planilha1.Range("B:B"), txtCod)
If ver > 0 Then
MsgBox " já Cadastrado!", vbCritical, "Código"
Exit Sub
End If

Call Registrar

End Sub

Private Sub UserForm_Initialize()
CbModelo.AddItem "X500"
CbModelo.AddItem "VTEC"

CBFornecedor.AddItem "A"
CBFornecedor.AddItem "P"
CBFornecedor.AddItem "X"

CbFuncionario.AddItem "O"
CbFuncionario.AddItem "E"
CbFuncionario.AddItem "S"
CbFuncionario.AddItem "F"



Set dpFrom = New DateTimePicker
With dpFrom
.Add ComboBox1
.Create Me, "dd/mmm/yyyy", _
BackColor:=&H125FFFF, _
TitleBack:=&H808000, _
Trailing:=&H99FFFF, _
TitleFore:=&HFFFFFF
End With
End Sub

Sub Vazio()

Do

If Not (IsEmpty(ActiveCell)) Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True

End Sub

Sub Registrar()

Planilha1.Select

Call Vazio


Dim cod As String
cod = txtCod


ActiveCell.Value = cod
ActiveCell.Offset(0, 1).Value = CbModelo.Value
ActiveCell.Offset(0, 2).Value = dpFrom.Value
ActiveCell.Offset(0, 3).Value = CBFornecedor.Value
ActiveCell.Offset(0, 4).Value = CbFuncionario.Value

MsgBox "Salvo com Sucesso!", vbInformation, "REGISTRO"

txtCod = ""
CbModelo = ""
CBFornecedor = ""
CbFuncionario = ""

End Sub


Esse seira meu Form2, onde eu salvaria somente se o cod do produto existe na tabela Entrada


Private Sub btnSalvar_Click()
If Cbocarro.Text = "" Or TxtCod2.Text = "" Or CbModelo2.Text = "" Or CbFuncionario2.Text = "" Then
MsgBox "Todos os campos devem ser preenchidos!", vbCritical, "ERRO"
Exit Sub
End If

Planilha3.Activate
Planilha3.Range("C5").Select


Dim ver As Double
ver = WorksheetFunction.CountIf(Planilha3.Range("C:C"), TxtCod2)
If ver > 0 Then
MsgBox "Módulo já Cadastrado!", vbCritical, "Código"
Exit Sub
End If

Call Alocar



End Sub

Private Sub UserForm_Initialize()
FormCad.Hide
CbModelo2.AddItem "X500"
CbModelo2.AddItem "VTEC"


CbFuncionario2.AddItem ""
CbFuncionario2.AddItem "E"
CbFuncionario2.AddItem "S"
CbFuncionario2.AddItem "F"

Set dpFrom1 = New DateTimePicker
With dpFrom1
.Add ComboBox2
.Create Me, "dd/mmm/yyyy", _
BackColor:=&H125FFFF, _
TitleBack:=&H808000, _
Trailing:=&H99FFFF, _
TitleFore:=&HFFFFFF
End With

Dim carro As Integer

carro = Range("Carros!B4").End(xlDown).Row

Cbocarro.RowSource = "Carros!B4:B" & carro


End Sub

Sub Vazio2()

Do

If Not (IsEmpty(ActiveCell)) Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True

End Sub
Sub Alocar()

Planilha3.Select

Call Vazio2

Dim cod_Alocar As String
cod_Alocar = TxtCod2


ActiveCell.Value = cod_Alocar
ActiveCell.Offset(0, -1).Value = Cbocarro.Value
ActiveCell.Offset(0, 1).Value = CbModelo2.Value
ActiveCell.Offset(0, 2).Value = dpFrom1.Value
ActiveCell.Offset(0, 3).Value = CbFuncionario2.Value


TxtCod2 = ""
CbModelo2 = ""
CbFuncionario2 = ""

End Sub

Re: Aceitar somente dados já cadastrados

Enviado: Qua Ago 05, 2020 8:59 am
por Wagner Morel
Anexe seu arquivo.

Re: Aceitar somente dados já cadastrados

Enviado: Qui Ago 06, 2020 8:50 pm
por Bruno_Henrique
Segue o anexo

Re: Aceitar somente dados já cadastrados

Enviado: Sex Ago 07, 2020 9:55 am
por Wagner Morel
Bruno,

Bom dia!

Veja se é assim.

Re: Aceitar somente dados já cadastrados

Enviado: Sáb Ago 08, 2020 9:37 pm
por Bruno_Henrique
Boa Noite, Wagner.

No caso quando eu for colocar um id de um módulo no FormAlocar1 no campo TxtCod2, o sistema busca se esse id já está na tabela Entrada. Se o id já estiver na Tabela entrada ele aceita e adiciona esse mesmo id na tabela alocar. Caso contrario, ele me avida que esse id não foi cadastrado e não aceita que eu adicione na tabela alocar

Re: Aceitar somente dados já cadastrados

Enviado: Seg Ago 10, 2020 8:48 am
por Wagner Morel
Ok. Acho que eu havia entendido o contrário. Veja se é assim.

OBS. Não mexi na sua rotina Alocar que já estava pronta. Apenas coloquei ela no local certo.

Re: Aceitar somente dados já cadastrados

Enviado: Seg Ago 10, 2020 9:18 pm
por Bruno_Henrique
Wagner, boa noite. Cara, agora ficou perfeito.

Muito obrigado. Espero contar com sua ajuda mais adiante ;)