Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por PedroRamirez
#68028
Boa tarde, recentemente criei um excel com alguns códigos em VBA para controlar a entrada de pedidos de um restaurante.


Criei um formulário com listbox onde é possível incluir e excluir itens, porém ao incluir um item, excluir e tentar adicionar um novo item o excel crasha. Isso só acontece quando eu incluo e excluo o primeiro item, nessa ordem. Se eu incluir dois item, depois excluir um, consigo incluir outro depois normalmente, funciona normalmente até mesmo se eu incluir dois itens e excluir os dois... Só da esse crash quando eu incluo o primeiro item e depois excluo o primeiro item, nessa ordem...

Código do botão de incluir:
Private Sub btn_form4_inserir_Click()
'On Error Resume Next

'DESABILITA FUNÇÕES DESNECESSÁRIAS PARA EXECUTAR MACROS
Call OTIMIZAR_PROCESSOS_INICIO

'SE TIVER VAZIO CONTA COMO 1
If form4_quantidade_produto.txt_form4_quantidade = "" Then
form4_quantidade_produto.txt_form4_quantidade.Value = 1
Else
End If

'INSERIR PROUTO
Call INSERIR_PRODUTO
'FECHAR FORM4
Unload form4_quantidade_produto

'HABILITA FUNÇÕES NOVAMENTE
Call OTIMIZAR_PROCESSOS_FIM


End Sub
SUB INSERIR_PRODUTO:
Sub INSERIR_PRODUTO()
'On Error Resume Next

'INSERIR NOVO PRODUTO
Dim tabela As ListObject
Dim N As Integer, NLIN As Integer

Set tabela = Planilha6.ListObjects(1)
N = tabela.Range.Rows.Count
NLIN = form2_adicionar_produto.lbox_form2_selecao_produto.ListIndex


'ATUALIZAR TABELA 1 (PEDIDO TOTAL) DA PLANILHA REFERENCIAS
tabela.Range(N, 1).Value = form2_adicionar_produto.lbox_form2_selecao_produto.List(NLIN, 2)
tabela.Range(N, 2).Value = form2_adicionar_produto.lbox_form2_selecao_produto.List(NLIN, 1)
tabela.Range(N, 3).Value = FormatNumber(txt_form4_quantidade, 0)
tabela.Range(N, 4).Value = form2_adicionar_produto.lbox_form2_selecao_produto.List(NLIN, 3) * txt_form4_quantidade
tabela.Range(N, 5).Value = form2_adicionar_produto.lbox_form2_selecao_produto.List(NLIN, 0)

tabela.ListRows.Add


'ATUALIZAR LBOX PEDIDO DO FORM2 E LBOX PEDIDO DO FORM1

form2_adicionar_produto.lbox_form2_pedido.RowSource = Planilha6.Range("A1").CurrentRegion.Address(, , , True)
form1_novo_pedido.lbox_form1_pedido.RowSource = Planilha6.Range("A1").CurrentRegion.Address(, , , True)

'COLUNAS, TAMANHO DE COLUNAS E FUNÇÃO LOCKED DEFINIDOS DIRETO NA PROPRIEDADE DA LBOX


End Sub


Código do botão de excluir:
Private Sub btn_form2_remover_Click()
'On Error Resume Next

'DESABILITA FUNÇÕES DESNECESSÁRIAS PARA EXECUTAR MACROS
Call OTIMIZAR_PROCESSOS_INICIO

'SE NÃO FOR CABEÇALHO OU A ÚLTIMA LINHA REMOVE O SELECIONADO
Dim tabela As ListObject
Dim N As Integer, NLIN As Integer

Set tabela = Planilha6.ListObjects(1)
N = tabela.Range.Rows.Count
NLIN = form2_adicionar_produto.lbox_form2_pedido.ListIndex

If NLIN >= N - 1 Or NLIN = -1 Or NLIN = 0 Then

Else
Call REMOVER_PRODUTO
End If

'HABILITA FUNÇÕES NOVAMENTE
Call OTIMIZAR_PROCESSOS_FIM


End Sub
SUB REMOVER_PRODUTO:
Sub REMOVER_PRODUTO()

'REMOVER DA LBOX PEDIDO O PRODUTO SELECIONADO
Dim tabela As ListObject
Dim N As Integer, NLIN As Integer

Set tabela = Planilha6.ListObjects(1)
N = tabela.Range.Rows.Count
NLIN = form2_adicionar_produto.lbox_form2_pedido.ListIndex

Range(tabela).Rows(NLIN).Delete

End Sub
Consegui clicar rápido em depurar antes de crashar e o erro aparece nessa linha:
Imagem

Anexei também o programa que eu criei, para chegar nessa parte do erro basta clicar em Novo Pedido > Adicionar. Para inserir um produto basta clicar duas vezes em cima dele no listbox de cima. Para excluir um produto basta selecionar o produto no listbox de baixo e clicar no botão Remover.


Se puderem me ajudar, ficarei muito grato!
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por PedroRamirez em 25 Nov 2021 às 16:12, em um total de 1 vez.

Bom dia Para saber o número de linhas com V[…]

Olha só, sem vc anexar uma planilha exemplo[…]

Pessoal, gostaria de uma ajuda de vocês se p[…]

[AJUDA]VBA Crashando

up

Fórmula para contagem

Segue abaixo um exemplo

SOMAR PRODUTOS

Junqueira, desculpa a demora . obrigado. perfeito

Boa tarde. Com a ajuda de um membro do fór[…]