Usuário com melhor resposta
Visual Basic usando o Offset.

Pergunta
-
Estou precisando de uma ajuda com respeito ao Offset.
Eu estou tentando criar um mini banco de dados dentro do Excel de empresas. Eu criei um formulário com alguns campos para fazer o cadastro de uma nova empresa. Ate ai tudo bem. O que eu fiz foi o seguinte:
Coloquei os nomes dos campos nas células que eu quis, exemplo:
Na célula C7 está o nome código onde no formulário eu coloquei para adicionar um novo código (01) para se fazer uma identificação com uma formula que eu irei usar depois. Os outros campos estão na D7, E7 e assim sucessivamente. O último é o T7. Beleza? O que eu quero fazer? É simples, mas não sei qual código usar:
Eu quero que, após o término do último preenchimento no formulário que é na T8 (as informações estão na linha debaixo) ele volte para a C9(e assim por diante, depois: C10, C11...)para que eu, caso queira, realizar um novo cadastro ele não pegar na linha que já foi adicionado uma empresa. Eu vou colocar o código que eu usei até o momento. Lembrando que eu sou MUITO iniciante em programação. Espero que possam me ajudar, pois já não sei mais o que eu faço.
Código:
Private Sub CommandButton1_Click()
Sheets("Banco de Dados").Visible = True
Sheets("Banco de Dados").Select
ActiveCell = numero.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = Empresa.Text
ActiveCell.Offset(0, 1).Activate
ActiveCell = endereco.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = cnpj.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = cep.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = municipio.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = centro.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = emissor.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = fixo.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = celular.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = email.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = br.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = coe.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = gerente.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = almoxarife.Text
ActiceCell = coberta.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = canteiro.Text
ActiveCell.Offset(0, 1).Activate
ActiceCell = guia.Text
numero.Value = ""
Empresa.Value = ""
endereco.Value = ""
cnpj.Value = ""
cep.Value = ""
municipio.Value = ""
centro.Value = ""
emissor.Value = ""
fixo.Value = ""
celular.Value = ""
email.Value = ""
br.Value = ""
coe.Value = ""
gerente.Value = ""
almoxarife.Value = ""
coberta.Value = ""
canteiro.Value = ""
guia.Value = ""
cadastro.HideEnd Sub
Grato!
- Editado [Dúvida] Visual Basic Userform quinta-feira, 6 de setembro de 2012 14:01
Respostas
-
Amigo... Boa tarde...
respondi uma pergunta parecida com a tua a pouco...
voce esta precisando de uma rotina para que ela adicione os valor dos objetos do Form para a planilha sendo que sempre adicionando os valores na proxima linha.
dá uma olhada nesse codigo:
Seguinte no Evento Click do Botao para Inserir os dados voce coloca o seguinte codigo adaptando de acordo com o teu caso.
' wsCadastro - planilha que voce esta adicionando as informacoes
Set wsCadastro = Worksheets("Cadastro")
Final = wsCadastro.Cells(65536, 1).End(xlUp).Row
lin = Final + 1If (txtNome.text = "" Or txtSobreNome.text = "" Or txtIdade.text = "" Or txtNascimento.text = "") Then
MsgBox ("Há Campos não preenchidos!")
ElsewsCadastro.Cells(lin, 1).Value = txtNome.text
wsCadastro.Cells(lin, 2).Value = txtSobreNome.text
wsCadastro.Cells(lin, 3).Value = txtIdade.text
wsCadastro.Cells(lin, 4).Value = txtNascimento.textespero que ajude... 8D
OBS: Não esquece de votar como Util. 8)
- Sugerido como Resposta Gildson Silva quinta-feira, 6 de setembro de 2012 19:00
- Não Sugerido como Resposta Gildson Silva quinta-feira, 6 de setembro de 2012 19:00
- Marcado como Resposta Harley AraujoModerator terça-feira, 11 de setembro de 2012 11:19
-
Cara... Boa tarde... 8)
Que bom que voce conseguiu adequar o codigo na sua situacao...
Em relacao ao procv vc pode trocalo por uma parte do codigo que te passei é so adequar com relacao a forma de como utilizá-lo... seguinte...
no evento Change do Campo de pesquisa voce pode colocar um codigo tipo esse que fiz... (adequando ao seu caso....):
Public Sub Pesquisa(ByVal Pesquisa As String) Dim existe As Boolean Dim cont As Integer Dim lin As Integer Set wsCadastro = Worksheets("Cadastro") Final = wsCadastro.Cells(65536, 1).End(xlUp).Row ' passa da linha 2 ate a linha Final (coloquei linha dois considerando que a 1 seja a descricao da coluna) For cont = 2 To Final If InStr(1, Cells(cont, 1).Value, Pesquisa, vbTextCompare) Then existe = True lin = cont Exit For End If existe = False Next ' testa se encontrou alguma ocorrencia If existe Then ' caso encontre' txtNome.Text = wsCadastro.Cells(lin, 1).Value txtSobreNome.Text = wsCadastro.Cells(lin, 2).Value txtIdade.Text = wsCadastro.Cells(lin, 3).Value txtDataDeNascimento.Text = wsCadastro.Cells(lin, 4).Value Else ' caso nao encontre MsgBox ("Não foi encontrado nenhum resultado para: " & Pesquisa) End If End Sub
ja que voce quer fazer uma aplicacao bacana no Excel... seria interessante voce fazer ela totalmente em UserForm... utilizando as planilhas somente como fonte de dados. fica uma coisa mais interessante. 8)
e qualquer duvida.... é so perguntar... 8D
OBS: Não esquece de votar como Util. 8)
- Editado Gildson Silva sexta-feira, 7 de setembro de 2012 15:52
- Marcado como Resposta Harley AraujoModerator terça-feira, 11 de setembro de 2012 11:19
Todas as Respostas
-
Amigo... Boa tarde...
respondi uma pergunta parecida com a tua a pouco...
voce esta precisando de uma rotina para que ela adicione os valor dos objetos do Form para a planilha sendo que sempre adicionando os valores na proxima linha.
dá uma olhada nesse codigo:
Seguinte no Evento Click do Botao para Inserir os dados voce coloca o seguinte codigo adaptando de acordo com o teu caso.
' wsCadastro - planilha que voce esta adicionando as informacoes
Set wsCadastro = Worksheets("Cadastro")
Final = wsCadastro.Cells(65536, 1).End(xlUp).Row
lin = Final + 1If (txtNome.text = "" Or txtSobreNome.text = "" Or txtIdade.text = "" Or txtNascimento.text = "") Then
MsgBox ("Há Campos não preenchidos!")
ElsewsCadastro.Cells(lin, 1).Value = txtNome.text
wsCadastro.Cells(lin, 2).Value = txtSobreNome.text
wsCadastro.Cells(lin, 3).Value = txtIdade.text
wsCadastro.Cells(lin, 4).Value = txtNascimento.textespero que ajude... 8D
OBS: Não esquece de votar como Util. 8)
- Sugerido como Resposta Gildson Silva quinta-feira, 6 de setembro de 2012 19:00
- Não Sugerido como Resposta Gildson Silva quinta-feira, 6 de setembro de 2012 19:00
- Marcado como Resposta Harley AraujoModerator terça-feira, 11 de setembro de 2012 11:19
-
Amigo, perfeito. O Código deu certo, fico muito feliz de entregar esse trabalho ao meu chefe e votar em sua resposta. Agora pode me tirar outra dúvida em relação ao Excel?
Quando eu coloco a Fórmula do Procv acontece como a está na imagem abaixo, a fórmula fica ativa e não funciona, sabe como resolver?
-
Cara... Boa tarde... 8)
Que bom que voce conseguiu adequar o codigo na sua situacao...
Em relacao ao procv vc pode trocalo por uma parte do codigo que te passei é so adequar com relacao a forma de como utilizá-lo... seguinte...
no evento Change do Campo de pesquisa voce pode colocar um codigo tipo esse que fiz... (adequando ao seu caso....):
Public Sub Pesquisa(ByVal Pesquisa As String) Dim existe As Boolean Dim cont As Integer Dim lin As Integer Set wsCadastro = Worksheets("Cadastro") Final = wsCadastro.Cells(65536, 1).End(xlUp).Row ' passa da linha 2 ate a linha Final (coloquei linha dois considerando que a 1 seja a descricao da coluna) For cont = 2 To Final If InStr(1, Cells(cont, 1).Value, Pesquisa, vbTextCompare) Then existe = True lin = cont Exit For End If existe = False Next ' testa se encontrou alguma ocorrencia If existe Then ' caso encontre' txtNome.Text = wsCadastro.Cells(lin, 1).Value txtSobreNome.Text = wsCadastro.Cells(lin, 2).Value txtIdade.Text = wsCadastro.Cells(lin, 3).Value txtDataDeNascimento.Text = wsCadastro.Cells(lin, 4).Value Else ' caso nao encontre MsgBox ("Não foi encontrado nenhum resultado para: " & Pesquisa) End If End Sub
ja que voce quer fazer uma aplicacao bacana no Excel... seria interessante voce fazer ela totalmente em UserForm... utilizando as planilhas somente como fonte de dados. fica uma coisa mais interessante. 8)
e qualquer duvida.... é so perguntar... 8D
OBS: Não esquece de votar como Util. 8)
- Editado Gildson Silva sexta-feira, 7 de setembro de 2012 15:52
- Marcado como Resposta Harley AraujoModerator terça-feira, 11 de setembro de 2012 11:19