Usuário com melhor resposta
Erro em tempo de execução 424. O objeto é obrigatório.

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
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
-
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
-
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
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
-
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.ValueObrigado 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
-
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
-
-
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
-
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!!!