Página 1 de 1

[RESOLVIDO]VBA Crashando

Enviado: 24 Nov 2021 às 15:29
por PedroRamirez
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!

Re: [AJUDA]VBA Crashando ao excluir e depois adicionar produto

Enviado: 25 Nov 2021 às 14:33
por PedroRamirez
up

Re: [AJUDA]VBA Crashando

Enviado: 03 Dez 2021 às 10:04
por PedroRamirez
up

Re: [AJUDA]VBA Crashando

Enviado: 05 Dez 2021 às 08:31
por osvaldomp
Olá, @PedroRamirez .

Ao abrir o seu arquivo eu excluí a linha vazia da Tabela, segunda linha abaixo do cabeçalho, aí tentei inserir um produto e o Excel também travou. Talvez nessa situação ocorra algo parecido com a sequência que você relatou (insere/exclui/insere/trava).

É possível que o travamento tenha relação com a propriedade .RowSource das ListBox e ao tentar inserir uma linha na Tabela pode existir conflito com aquela propriedade.

Eu fiz um teste aqui e o travamento não mais ocorreu. Antes do comando que insere uma linha na Tabela eu coloquei os comandos para limpar a propriedade .RowSource das duas ListBox. Se você quiser experimentar, segue abaixo.
Código: Selecionar todos
form2_adicionar_produto.lbox_form2_pedido.RowSource = ""
form1_novo_pedido.lbox_form1_pedido.RowSource = ""

tabela.ListRows.Add

Re: [AJUDA]VBA Crashando

Enviado: 06 Dez 2021 às 14:45
por PedroRamirez
osvaldomp escreveu: 05 Dez 2021 às 08:31 Olá, @PedroRamirez .

Ao abrir o seu arquivo eu excluí a linha vazia da Tabela, segunda linha abaixo do cabeçalho, aí tentei inserir um produto e o Excel também travou. Talvez nessa situação ocorra algo parecido com a sequência que você relatou (insere/exclui/insere/trava).

É possível que o travamento tenha relação com a propriedade .RowSource das ListBox e ao tentar inserir uma linha na Tabela pode existir conflito com aquela propriedade.

Eu fiz um teste aqui e o travamento não mais ocorreu. Antes do comando que insere uma linha na Tabela eu coloquei os comandos para limpar a propriedade .RowSource das duas ListBox. Se você quiser experimentar, segue abaixo.
Código: Selecionar todos
form2_adicionar_produto.lbox_form2_pedido.RowSource = ""
form1_novo_pedido.lbox_form1_pedido.RowSource = ""

tabela.ListRows.Add


Fiz diversos testes utilizando sua dica e deu certo sim! Muito obrigado! ;)