Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

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 06 Dez 2021 às 14:45, em um total de 2 vezes.
Por osvaldomp
#68184
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
PedroRamirez agradeceu por isso
Por PedroRamirez
#68195
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! ;)
osvaldomp agradeceu por isso
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord