- 24 Nov 2021 às 15:29
#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:
Código do botão de excluir:

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!
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()SUB INSERIR_PRODUTO:
'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()
'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()SUB REMOVER_PRODUTO:
'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()Consegui clicar rápido em depurar antes de crashar e o erro aparece nessa linha:
'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

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 06 Dez 2021 às 14:45, em um total de 2 vezes.