none
Visual Basic usando o Offset. RRS feed

  • 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.Hide

    End Sub

    Grato!


    quinta-feira, 6 de setembro de 2012 14:00

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 + 1

        If (txtNome.text = "" Or txtSobreNome.text = "" Or txtIdade.text = "" Or txtNascimento.text = "") Then   
            MsgBox ("Há Campos não preenchidos!")       
        Else

        wsCadastro.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.text

    espero 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
    quinta-feira, 6 de setembro de 2012 18:41
  • 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)



    sexta-feira, 7 de setembro de 2012 15:46

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 + 1

        If (txtNome.text = "" Or txtSobreNome.text = "" Or txtIdade.text = "" Or txtNascimento.text = "") Then   
            MsgBox ("Há Campos não preenchidos!")       
        Else

        wsCadastro.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.text

    espero 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
    quinta-feira, 6 de setembro de 2012 18:41
  • 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?

    quinta-feira, 6 de setembro de 2012 19:44
  • 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)



    sexta-feira, 7 de setembro de 2012 15:46