none
Erro em tempo de execução 424. O objeto é obrigatório. RRS feed

  • Pergunta

  • Sou iniciante em VBA, e este erro está me segurando. Parece algo bem fácil de se resolver, mas não estou conseguindo.

    A macro segue abaixo, e foi utilizada para o botão Salvar. No excel estão os códigos na A2, categoria B2, produto C2, tamanho D2, estoque E2, valor de compra F2, valor de venda G2.

    -----------------------------------------------------------            

    Private Sub btn_salvar_Click()

        Worksheets("Produtos").Activate
        Range("A3").Select


        Dim cod

        On Error GoTo Continua
        Cells.Find(What:=txt_produto.Value).Activate

        If Activate.Value = txt_produto.Value Then
        MsgBox "Esse produto já existe!"


        Else

    Continua:


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


        cod = Range("A500").End(xlUp).Offset(0, 0).Value
        ActiveCell.Offset.Value = cod + 1

        ActivateCell.Offset(0, 1).Value = cbo_categoria.Value
        ActivateCell.Offset(0, 2).Value = txt_produto.Value
        ActivateCell.Offset(0, 3).Value = cbo_tamanho.Value
        ActivateCell.Offset(0, 4).Value = txt_quantidade.Value
        ActivateCell.Offset(0, 5).Value = txt_valorcompra.Value
        ActivateCell.Offset(0, 6).Value = txt_valorvenda.Value


        MsgBox "Produto adicionado com sucesso!!!"


    End If


        txt_produto.Value = Empty
        txt_quantidade.Value = Empty
        txt_valorcompra.Value = Empty
        txt_valorvenda.Value = Empty

        cbo_categoria.Value = Empty
        cbo_tamanho.Value = Empty

        txt_produto.SetFocus

    End Sub

    -------------------------------------------------------------------------------------------------Aqui começam os erros:                        ActiveCell.Offset.Value = cod + 1
        ActivateCell.Offset(0, 1).Value = cbo_categoria.Value
        ActivateCell.Offset(0, 2).Value = txt_produto.Value
        ActivateCell.Offset(0, 3).Value = cbo_tamanho.Value
        ActivateCell.Offset(0, 4).Value = txt_quantidade.Value
        ActivateCell.Offset(0, 5).Value = txt_valorcompra.Value
        ActivateCell.Offset(0, 6).Value = txt_valorvenda.Value

    quinta-feira, 29 de outubro de 2015 16:32

Respostas

  • *
    
        ActiveCell.Offset(0, 1).Value = cbo_categoria.Value
        ActiveCell.Offset(0, 2).Value = txt_produto.Value
        ActiveCell.Offset(0, 3).Value = cbo_tamanho.Value
        ActiveCell.Offset(0, 4).Value = txt_quantidade.Value
        ActiveCell.Offset(0, 5).Value = txt_valorcompra.Value
        ActiveCell.Offset(0, 6).Value = txt_valorvenda.Value

    • Sugerido como Resposta André Santo quinta-feira, 29 de outubro de 2015 16:40
    • Marcado como Resposta Francesco1992 quinta-feira, 29 de outubro de 2015 17:03
    quinta-feira, 29 de outubro de 2015 16:40
  • Use ActiveCell.value = cod + 1 e depois o resto do código que postei
    • Marcado como Resposta Francesco1992 quinta-feira, 29 de outubro de 2015 17:03
    quinta-feira, 29 de outubro de 2015 16:56
  • Claro.

    'ActivateCell' não existe, o que existe é 'activecell', que refere-se a célula ativa.

    ActivateCell.Offset(0, 1).Value = cbo_categoria.Value

    Segundo, o método offset, representa um deslocamento para cima e para baixo. Então quando você usa offset, precisa definir os parametros x e y, x linhas para cima ou para baixo e y colunas a direita ou a esquerda

    Além disto, o que você precisava era inserir o valor de cod + 1 na célula ativa, o que não demandava nenhum deslocamento, por isto bastava usar activecell.value = cod + 1

    ActiveCell.Offset.Value = cod + 1

    Adicionalmente, queria te apresentar os objetos range e cell, que podem lhe ser úteis.

    O Range referencia uma célula utilizando a notação do próprio Excel. Ex: Range("A1").value = cod

    O cells utiliza os parametros linha e coluna, ex: Cells(1, 1).value refere-se também a célula A1

    Abs, precisando é só falar



    • Editado André Santo quinta-feira, 29 de outubro de 2015 17:14
    • Sugerido como Resposta André Santo quinta-feira, 29 de outubro de 2015 17:14
    • Marcado como Resposta Francesco1992 quinta-feira, 29 de outubro de 2015 17:37
    quinta-feira, 29 de outubro de 2015 17:13

Todas as Respostas

  • *
    
        ActiveCell.Offset(0, 1).Value = cbo_categoria.Value
        ActiveCell.Offset(0, 2).Value = txt_produto.Value
        ActiveCell.Offset(0, 3).Value = cbo_tamanho.Value
        ActiveCell.Offset(0, 4).Value = txt_quantidade.Value
        ActiveCell.Offset(0, 5).Value = txt_valorcompra.Value
        ActiveCell.Offset(0, 6).Value = txt_valorvenda.Value

    • Sugerido como Resposta André Santo quinta-feira, 29 de outubro de 2015 16:40
    • Marcado como Resposta Francesco1992 quinta-feira, 29 de outubro de 2015 17:03
    quinta-feira, 29 de outubro de 2015 16:40
  • Continua com o erro André Santo. Aqui começa. >>ActiveCell.Offset.Value = cod + 1, porém se retirado o erro passa a ser a próxima linha. >>   ActivateCell.Offset(0, 1).Value = cbo_categoria.Value, e assim em diante.

        ActiveCell.Offset.Value = cod + 1
        ActivateCell.Offset(0, 1).Value = cbo_categoria.Value
        ActivateCell.Offset(0, 2).Value = txt_produto.Value
        ActivateCell.Offset(0, 3).Value = cbo_tamanho.Value
        ActivateCell.Offset(0, 4).Value = txt_quantidade.Value
        ActivateCell.Offset(0, 5).Value = txt_valorcompra.Value
        ActivateCell.Offset(0, 6).Value = txt_valorvenda.Value

    Obrigado pela atenção.

    Alguém teria outra dica?

    • Marcado como Resposta Francesco1992 quinta-feira, 29 de outubro de 2015 17:37
    • Não Marcado como Resposta Francesco1992 quinta-feira, 29 de outubro de 2015 17:37
    quinta-feira, 29 de outubro de 2015 16:50
  • Use ActiveCell.value = cod + 1 e depois o resto do código que postei
    • Marcado como Resposta Francesco1992 quinta-feira, 29 de outubro de 2015 17:03
    quinta-feira, 29 de outubro de 2015 16:56
  • Obrigado André!!! Funcionou!! Se eu não estiver pedindo muito, poderia me explicar o que eu havia feito de errado?

    Novamente, muito obrigado!

    quinta-feira, 29 de outubro de 2015 17:02
  • Claro.

    'ActivateCell' não existe, o que existe é 'activecell', que refere-se a célula ativa.

    ActivateCell.Offset(0, 1).Value = cbo_categoria.Value

    Segundo, o método offset, representa um deslocamento para cima e para baixo. Então quando você usa offset, precisa definir os parametros x e y, x linhas para cima ou para baixo e y colunas a direita ou a esquerda

    Além disto, o que você precisava era inserir o valor de cod + 1 na célula ativa, o que não demandava nenhum deslocamento, por isto bastava usar activecell.value = cod + 1

    ActiveCell.Offset.Value = cod + 1

    Adicionalmente, queria te apresentar os objetos range e cell, que podem lhe ser úteis.

    O Range referencia uma célula utilizando a notação do próprio Excel. Ex: Range("A1").value = cod

    O cells utiliza os parametros linha e coluna, ex: Cells(1, 1).value refere-se também a célula A1

    Abs, precisando é só falar



    • Editado André Santo quinta-feira, 29 de outubro de 2015 17:14
    • Sugerido como Resposta André Santo quinta-feira, 29 de outubro de 2015 17:14
    • Marcado como Resposta Francesco1992 quinta-feira, 29 de outubro de 2015 17:37
    quinta-feira, 29 de outubro de 2015 17:13
  • Muito bom! Suas respostas me ajudaram muito, André!!! Eu estou apenas iniciando a mexer no VBA, e faço por hobby, pois acho super interessante, porém ainda não tenho essa capacidade de perceber os detalhes. Parabéns por todo seu conhecimento e também por toda a ajuda!!!
    quinta-feira, 29 de outubro de 2015 17:40